V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
探索世界的好奇心万岁
Udacity
网易公开课
Godel, Escher, Bach: An Eternal Golden Braid
V2EX  ›  分享发现

如何看待淘宝 APP 采用 80 端口传输非 http 协议?

  •  
  •   qianguozheng · 7 天前 · 4440 次点击

    我就想问,他们难道不知道有个东西叫 http 代理吗?

    https://www.zhihu.com/question/57350923?guide=1

    第 1 条附言  ·  5 天前
    喷点倒是没有。主要是看到了大家的思维习惯。

    从用户角度来讲:如果我的网络可以访问新浪,腾讯等 APP,为什么不能访问淘宝?你淘宝的 APP 做的兼容性不好。
    从各位技术角度来看: 所谓 80,443 等默认端口,是可以传输任何我想传输的数据的,我没错。

    我的观点是: 你淘宝一个这么大的企业,用户肯定有好几个亿,而这些人中懂技术,能知道这个 http 代理会导致软件不能用的,我想除了评论的各位外,全国肯定有更多。他们无法避免你所使用的网络中不存在 http 代理,也就无法避免遇到类似的问题。

    谁的问题?

    我觉得技术上可以解决这种问题,技术目前没有做错,但是做得不够好。
    82 回复  |  直到 2017-03-21 15:21:56 +08:00
        1
    LevineChen   7 天前 via iPhone
    防止中间人攻击和业务逻辑暴露有什么问题么
        2
    lfk0000   7 天前
    我最近安卓机上的淘宝 app 点啥都没反应。。。难道也是这个原因...
        3
    hjc4869   7 天前
    80 端口也不一定要走 http 代理啊。
        4
    helone   7 天前
    如果我没猜错应该是 httpdns
        5
    mhycy   7 天前
    走私有协议有什么不对的么? HTTP 代理和 80 端口有什么关系?
        6
    xialdj   7 天前 via iPhone   ♥ 1
    80 端口和 http 协议有必然关系吗? 我把 sshd 开在 80 端口 squid 开在 22 端口 楼主你有问题吗 不要抓着个事就搞大新闻
        7
    choury   7 天前
    @hjc4869 #3
    @mhycy #5
    淘宝没有考虑有的网络必须配置代理才能访问外网的情况
        8
    mooncakejs   7 天前
    网络代理和 80 端口有什么关系, 代理是 应当是软件自己设置的。
    哦,是没考虑劫持 80 端口的代理吧。那么,为什么要考虑?
        9
    ooxxcc   7 天前
    @choury HTTP CONNECT 没啥问题吧
        10
    Shura   7 天前 via Android   ♥ 1
    需求分析时一般只考虑大部分都普通用户的需求。
        11
    hjc4869   7 天前   ♥ 1
    @choury 需要代理的时候应该在手机上配置而不是在路由器上无脑劫持 80 端口,这种情况下应该应用程序自己实现走 HTTP CONNECT 代理。
    另外 Telegram 之类的 app 也有在 80/443 端口上传输非 http/tls 的私有协议。
        12
    mhycy   7 天前
    @choury
    APP 不认识 HTTP 代理而已,使用 80 端口传输非 HTTP 协议数据不是问题。
    难道 APP 还要考虑被劫持了还能正常访问?
        13
    choury   7 天前
    @hjc4869 #10
    @mhycy #11
    我不是楼主,我不知道他是用劫持的方式实现还是用配置的方式实现,但是的确是有应用是不检测代理,直接跑的,我不知道淘宝这个是不是也这样
        14
    wwqgtxx   7 天前 via iPhone
    我只想说,他们为什么要考虑 http 代理
        15
    nfroot   7 天前
    腾讯 QQ 也是这样的,有啥问题?
        16
    zwh8800   7 天前 via iPhone
    好像和之前某些运营商封禁非 80 端口有关系
        17
    Zzzzzzzzz   7 天前
    LS 正解, 关键词, cmwap 、 uniwap
        18
    RobertYang   7 天前 via Android
    听说淘宝移动端使用的是基于 TLS1.3 的协议
        19
    quicknight   7 天前
    如果是识别到数据被劫持而拒绝服务,我觉得淘宝这样做是对的。
        20
    gamexg   6 天前 via Android
    楼上回答的没人用全局翻墙?
    80 跑非 http 就废掉了直接重定向做法,需要用转 socks5 了。
        21
    jych1224   6 天前
    现在 V2EX 也开始有这种如何看待了,要被某乎同化么
        22
    XDA   6 天前
    微信公众平台还强制接口走 80 呢
        23
    iVeego   6 天前
    我问下,有时候用小飞机“绕过大陆和局域网地址”的模式,打开阿里系的软件(淘宝,天猫,支付宝)没有网络连接,关闭小飞机就好了,也是因为这个原因吗?
        24
    iyaozhen   6 天前 via Android
    很正常啊。有时候为了突破一些特殊网络的限制(各种墙), tcp 私有协议经常走 80 、 443 等常用端口。

    而且为什么要考虑这种非常极端的用户场景?
        25
    simpx   6 天前
    80 端口最保险,为什么不用 80 端口。 zhihu 问题描述的很不友好

    利益相关,参与过淘宝 app 网络部分的开发
        26
    Tink   6 天前
    每 get 到喷点。。。
        27
    mozutaba   6 天前
    @iVeego 是的,不过更常见的是太慢啦
        28
    sobigfish   6 天前
    @simpx #25
    淘宝 app 的别跑,让我吐个槽点:有时候弹出的那个评价淘宝的 app 的提醒为啥点了去评价还不消失(所以下次仍会出现---也有点频繁)
        29
    qianguozheng   6 天前
    @simpx 你是保险了,我们这些做运营商的在路由器 /网关上架设 HTTP 代理,你的软件就不玩了。

    用户找的是我们,不是你们哦。。。
        30
    simpx   6 天前
    @qianguozheng #29 所以应该怎么做更合适呢?
        31
    qianguozheng   6 天前
    @LevineChen
    防止有中间人的方法很多,没必要非走 80 啊,业界默认 80 都是 HTTP 协议。
    换个角度想,这个 APP 的开发者对于网络环境的考虑不全面。抑或是图省事?
        32
    qianguozheng   6 天前
    @lfk0000 你用的啥网络?
        33
    qianguozheng   6 天前
    @simpx 我觉得吧,简单点,外面包层 http 协议,让数据更通用。
        34
    qianguozheng   6 天前
    @helone 还有这东西?没玩过
        35
    qianguozheng   6 天前
    @mhycy 问题是在有 http 代理的环境下, app 无法使用。
        36
    mhycy   6 天前
    @qianguozheng 你这个 HTTP 代理是劫持形式实现还是手机端配置 HTTP 代理实现?
        37
    qianguozheng   6 天前
    @XDA 我只能说设计傻逼
        38
    qianguozheng   6 天前
    @mhycy 肯定是劫持啦, squid 作为透明代理, 通过 iptables 的 REDIRECT 功能实现重定向数据报文。
        39
    simpx   6 天前
    @qianguozheng #33
    1. 多了额外的 overehead
    2. 为了包 http 头,得切分我的二进制流式数据,暂时没想到很好的规则来做这件事
    3. 用了 80 端口 不一定是 HTTP 数据,不少防火墙识别里面的具体协议来区分是否应该当 HTTP 连接处理,我参与的时候,有一个版本隐藏掉这些信息,避免被错误识别为 HTTP 了
    4. 接上一条,如果有明显的 http 标识,反而可能被有些运营商插广告
        40
    mhycy   6 天前   ♥ 1
    @qianguozheng
    既然你明确了是劫持,那么只能说是你的劫持没做好。
    别把帽子扣在 APP 上面。。。

    对于劫持,靠谱的劫持是必须做封包分析判断协议类型的。
        41
    weyou   6 天前   ♥ 1
    @iVeego 不是同一个原因,小飞机是 socks5 代理,代理的是底层的传输层协议。而这个 squid 是 http 代理,是代理的应用层协议。 socks5 代理是不管上层协议的具体内容的,换句话说, app 用任何端口传输的任何内容都会原封不动的转发出去。
        42
    iVeego   6 天前
    @weyou #41 那阿里系的软件出现这样的问题有办法解决吗?即使加入白名单直连,还是不行。
        43
    qianguozheng   6 天前
    @simpx
    兼容性嘛,肯定要耗费一些人力物力来解决的。
    简单点,直接换成 443 喽, 反正劫持也只能搞 80 端口的 http 数据, https 加密的一般没有运营商会乱搞。

    这样你的担忧就全没了,哈哈
        44
    weyou   6 天前
    楼主这个问题真不关 app 的事儿。 80 端口没有谁规定只能传输 http 的 stream 啊。你自己要代理 http ,你就得自己处理好代理之外的各种异常,没有深入用过 squid 透明代理,我不知道它是否有参数能够将不能识别的封包直接透传过去,楼主可以去查一查。
        45
    biaobiaoqi   6 天前 via iPhone
    这口锅,感觉不应该淘宝 app 背。
        46
    simpx   6 天前
    @qianguozheng #43

    兼容性当然考虑了

    你的代理是不是返回了什么异常 response

    如果访问失败,是会降级用普通 http 的
        47
    weyou   6 天前
    @iVeego 阿里系是有全球站点的,你从小飞机出去上淘宝,可能会定向到淘宝的国际站点。不知道是不是这个原因。 反正我的小飞机是分应用代理的,阿里系不在代理的名单里面。
        48
    weyou   6 天前
    @iVeego 我用白名单没有出过问题,你看看是不是该更新一下小飞机了。
        49
    qianguozheng   6 天前
    @simpx 那就不对了,你看到我的数据报截图了没, 400 Bad Request, 然后我在淘宝 App 里面点击天猫 直接提示网络不可用之类的,没有你说的降级这个(可能没做好),如果有的话,我多试几次应该就正常了,对吧。
        50
    qianguozheng   6 天前
    @biaobiaoqi 我这也是希望淘宝 App 越做越好,哈哈
        51
    qianguozheng   6 天前
    @simpx 要不你把跟淘宝 App 通信的那几个服务器地址告诉我?我把他们加到白名单里
        52
    qianguozheng   6 天前
    @weyou 还是你回答的靠谱。
    端口可以随便用,没错。
    我是找过 squid 没有相应的处理方法,所以来这么一问的,这么大的企业应该考虑各种情况,让用户用的舒心,用的方便,因为网络环境本就是复杂的,发现一种问题,就解决这种问题,越做越好嘛。
        53
    simpx   6 天前
    @qianguozheng #51 IP 是 httpdns 获取到的,不一定的。当然,也不会经常变,抓包到就是了
        54
    akira   6 天前
    有些公司会限制 只能访问外网特定端口。。
        55
    maplerecall   6 天前
    @qianguozheng 没毛病,端口本身和协议无关, 80 端口传其它协议业界里挺常见吧,就连 skype 这么大牌国际化的程序也会用 80 端口来保证在一些环境下的通信,虽然也被一些人吐槽,但既然微软都这样做了一定程度上可以说明其做法并不能说是不合理的,甚至说对大多数用户来说是合理的。

    所以我觉得这锅还是得劫持者来背……
        56
    qianguozheng   6 天前
    @simpx 你们那个走 80 端口的是 httpdns 请求阿?
        57
    qianguozheng   6 天前
    @maplerecall

    锅由劫持者来背我也不反对。
    但是,受影响的是用户阿,如果产品设计考虑到这些可能的问题,对于用户体验来说也是一种提升,你觉得呢
        58
    qianguozheng   6 天前
    @nfroot

    @simpx

    腾讯的 httpdns 貌似是正常的 http 请求封装的。

    https://www.qcloud.com/document/product/379/3524
        59
    maplerecall   6 天前
    @qianguozheng 就是为了用户考虑啊,比如有 100 个用户的网络只能通过 80 端口正常通信,而有 10 个用户需要或者会被不正确的劫持 80 端口,两者的需求是冲突的,那只能照顾人数更多的用户……
        60
    qianguozheng   6 天前
    @maplerecall 这句话说到正点了。

    不正确的劫持- 可以不考虑。 但是正常的 http 代理也没有考虑就不太好了吧。

    而且人家腾讯的 httpdns 是通过 http 的协议来实现的,如果是这样也没问题啊。现在的问题是它并没以 http 协议的形式封装 httpdns,导致了现在的问题。
        61
    hiboshi   6 天前   ♥ 1
    我个人觉得走 80 的唯一目的就是防止运营商对端口封锁,很多地区的小运营商针对非 80 , 443 端口进行屏蔽,比如 21 , 22 很多地方长宽、广电都屏蔽了,如果这些还走非 80 的话势必整个 APP 都废了,所以 ali 采用了 80 ,总不至于我网页都不能访问吧,既然用了 80 用了非 HHTP 协议,以 ali 的数据量和 http 报文长度 估计压力什么的很难满足吧!
        62
    mhycy   6 天前   ♥ 2
    说句不好听的明明是自己技术不过关劫持不做封包分析,为何这口锅要扣在 APP 上面呢?

    服务端返回 400 更多的是安全上的迷惑作用, 80 端口按常理是 HTTP 协议应用,但实际上是私有协议。
    HTTP 代理做劫持的时候必然需要做双向的封包分析以确定数据流是可处理的。
    这点都做不好的话别怪 APP 服务器不支持。

    另:劫持形式实现的 HTTP 代理不是正常的 HTTP 代理
        63
    jhdxr   6 天前   ♥ 1
    1. 用 80 端口(的原因之一)是在部分网络环境下只有 80 端口能用,对, 443 也不行
    2. 曾经有过一个串号的故障,经过排查就是某小运营商无视 cookie 针对 get 请求做了缓存, GG

    以我个人观点,在被劫持的情况下,提示不可用让用户意识到自己的网络环境可能存在问题也是正当的方案之一。
    利益相关:前手淘开发
        64
    firefox12   6 天前 via iPhone
    @qianguozheng http 代理和这个有什么关系, app 客户端又没要求走 http 代理。是你们强行把别人的请求走了 80 代理吧
        65
    cppgohan   6 天前
    个人理解是为了提高连通率, 有些奇葩的网络环境, 防火墙只给过 80 端口的也是有的.
        66
    incompatible   6 天前
    @qianguozheng 哪个业界默认 80 都是 HTTP 协议了?
    默认走 HTTP 协议以便你们运营商🐶做劫持?
        67
    iyaozhen   6 天前 via Android
    @hiboshi
    @jhdxr
    @cppgohan
    赞同,都是被逼的。我们也不想走 80 端口呀。其它端口经常不能使啊
    正常服务端会下发几个 ip(一般通过 httpdns),一个 ip 还会有几个端口,客户端会把几个 ip+端口都探测一轮,往往可能就是 80 端口响应最快。当然 80 端口有问题会切换,更近一步服务降级使用 http 协议。当然这是理想情况有时候并不能很好的切换
        68
    wavingclear   6 天前
    原来手机支付宝 app 总是掉线是这个原因……
        69
    mengzhuo   6 天前
    没毛病,我国的网络搞得我们做游戏的都得用 80 443
        70
    skylancer   6 天前
    用 80 是主要考虑到了比如移动这种运营商经常玩劫持而考虑的,我搜了下工单劫持基本都是移动,相当醉
    另外端口和业务不一定相关的啊... 这个喷点没意思
        71
    skylancer   6 天前
    我搜了下工单,第一页, 42 条记录,从 3 月 12 日到今天
    2 条联通劫持记录,剩下的 39 条全是移动

    啧啧啧
        72
    hslx111   6 天前
    400 是 squid 无法识别请求返回的吧 这锅真心不是淘宝 app 的
        73
    zpf124   6 天前
    @qianguozheng 巧了,我反倒是喜欢在 80 上代理 3389 端口,因为只有这样我才不会被各种各样的防火墙网关之类的弄掉。

    从来没有过任何一个组织制定过标准规定哪些端口是干什么的,都是协议中约定俗成的,并不代表其他产品不能占用这些端口。
        74
    mokeyjay   6 天前 via Android
    @iVeego 巧了,我也是
        75
    iVeego   6 天前
    @mokeyjay #74 这非常影响体验,不过后来我用曲线救国的方式搞定了。我用了 island 这个软件,一来限制阿里系的后台流氓行为,二来它直接连国内,正好。这是在酷安里面某个评论看到的。用下来体验非常不错。
        76
    BXIA   6 天前
    http 默认 80 ,不代表 http 当且仅当 port 80
        77
    JackWindows   5 天前 via iPhone
    估计楼主没听说过 web socket
        78
    qianguozheng   5 天前
    @JackWindows 我还真听说过,而且用过,搭建过,让你失望了
        79
    qianguozheng   5 天前
    @mhycy 确实,要是我能解决这个问题,也不会在这里发牢骚了,哈哈。
        80
    mhycy   5 天前
    @qianguozheng
    Python 写个代理滤一遍~
        81
    qianguozheng   5 天前
    @mhycy 设备性能差,没有安装 Python 环境
        82
    mhycy   5 天前
    @qianguozheng 去淘宝搞个 3215
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1889 人在线   最高记录 2466   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 80ms · UTC 04:42 · PVG 12:42 · LAX 21:42 · JFK 00:42
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1