V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hhacker
V2EX  ›  程序员

微信安卓 X5 浏览器一个让人无语的设定

  •  
  •   hhacker · 2017-12-25 16:02:20 +08:00 · 8997 次点击
    这是一个创建于 2526 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 微信浏览器默认会代理你的所有页面访问,包括 ajax 操作
    • 现在遇到一个超级无语的表现,在页面里 ajax post 时,如果微信的默认代理走通了,那业务表现正常,但是如果它这个代理不知道因为什么失败了或者便秘了,会要等待 4s 左右开启直连,直连的话其实一切是正常的
    • 只有部分安卓机型(小米手机,MIUI )出现,时而走代理时而不走代理,不走代理的时候基本都逃不过那等的 4s
    • 代理地址是这样的 Remote Address:163.177.73.12:8080
    • 感觉事情变成了玄学,服务器在它阻塞的 4s 里并没有收到请求
    16 条回复    2019-11-13 20:09:07 +08:00
    hhacker
        1
    hhacker  
    OP
       2017-12-25 16:36:55 +08:00
    目前能够使用的解决方案是:要么用 get 要么上 https
    kslr
        2
    kslr  
       2017-12-25 17:02:19 +08:00
    代理从谁哪里?微信服务器?
    w88975
        3
    w88975  
       2017-12-25 17:05:12 +08:00
    感觉并不是走代理 而是微信的网页安全检查
    chairuosen
        4
    chairuosen  
       2017-12-25 17:10:15 +08:00
    卧槽这是个大新闻啊,微信在监听并拦截所有 http POST 请求?
    hhacker
        5
    hhacker  
    OP
       2017-12-25 17:14:07 +08:00
    可以肯定是微信的服务器,这个无需震惊吧,这个很多人已经确认过了啊
    hhacker
        6
    hhacker  
    OP
       2017-12-25 17:16:01 +08:00   ❤️ 1
    #1 微信内置浏览器 x5 内核 有哪些坑及解决方案? - 李智辉的回答 - 知乎
    https://www.zhihu.com/question/30465777/answer/81110021

    #2 聊聊微信内页面发 Ajax 请求会重复请求的问题
    https://blog.fishlee.net/2016/07/07/double-request-from-wechat-client-with-ajax/

    #3 X5 重发 http 请求是怎样的?
    https://x5.tencent.com/tbs/technical.html#/detail/web/1/30948b53-875d-4b46-b05b-1122dd55c900
    kslr
        7
    kslr  
       2017-12-25 18:02:05 +08:00
    @hhacker #6 可是 X5 的文档可从来没有这样说过啊,我们也在用 X5。
    Biwood
        8
    Biwood  
       2017-12-25 18:10:21 +08:00
    非常非常恶心,手机 QQ 内置浏览器会劫持链接跳转到腾讯自己的网址然后再跳转回去,这个劫持不是在初次打开网址的时候,而是每一次跳转都劫持,我真是对这家公司没有任何好感。
    sobigfish
        9
    sobigfish  
       2017-12-25 19:53:23 +08:00
    关键是如何判断来自 x5 垃圾请求,并回复给它 408(能解决么? 408 )
    huangtao728
        10
    huangtao728  
       2017-12-25 23:45:22 +08:00 via Android
    实测了真的有这个现象,我之前遇到的是微信会强制转码一个我自己的网站,不能通过申诉关闭,只能绑定成为公众号业务域名避免
    现象是在一个用户的正常访问后,会有一个来自深圳电信的 IP 伪装成一台 iPhone 模拟访问,并缓存转码,之后访问的用户通通呈现这个转码版本

    几个问题:
    1、原网站的流量来源直接被掐掉了
    2、微信的缓存多久刷新没有明确指示,导致了一旦被缓存,来自微信的用户可能看不到网站的最新版本
    3、转码不够聪明,可能精简重要内容
    huangtao728
        11
    huangtao728  
       2017-12-25 23:52:50 +08:00 via Android
    https://i.loli.net/2017/12/25/5a411d67f11b6.png

    这是我几周前发现这个问题时的笔记,
    我的解决方案是根据特征做检测,发现模拟访问就返回特供版网页(精简到剩主要内容),让微信缓存,页面内提示该版本可能不实时,引导用户浏览器打开

    当时同时也阉割了特供版页面里网站的某些功能,比如登录,编辑,目的是逼着用户不在微信内浏览,现在看来还是有点远见啊
    xmcp
        12
    xmcp  
       2017-12-26 00:01:38 +08:00
    去年研究过微信的转码,发现微信不会转码错误页面。所以在 nginx 里加一条规则,看到 nsukey 参数强行把状态码设成 403,响应正文不变,这样就不会转码了。
    DOLLOR
        13
    DOLLOR  
       2017-12-26 00:09:47 +08:00
    同被这种机制恶心到了
    hhacker
        14
    hhacker  
    OP
       2017-12-26 09:21:37 +08:00
    翻 x5 的 faq 找到了这个
    https://x5.tencent.com/tbs/technical.html#/detail/web/1/849c02ab-8165-4e55-8628-e3ba8d8cf30e
    复制一下是这样的
    无论访问什么网页,如果网页超过一定时间没有响应,x5 浏览器会自动重新发起请求?
    这里有两个问题
    1 )一个是代理的问题,即代理认定响应的超时时间是 6S,在 6S 内没有给代理响应,代理认为链接失败,转而让终端走直连了。
    2 )终端直连发起请求,如果长时间没有收到响应,会进行重视,最多重视三次。
    解决办法有两个。
    1 )服务器端做兼容,尽量在 6S 内响应。
    2 )加直连的白名单,即忽略代理这条线,但是直连如果等待的时间太长,过了终端的超时时间,终端还是会发起重试。
    所以服务端处理的时间尽量压缩一下。

    #那么现在的问题是,直连白名单是由 TBS 管理的,似乎在开发者论坛发帖有一定可能性加到直连白名单里?
    smallgoogle
        15
    smallgoogle  
       2019-11-13 20:08:50 +08:00
    @huangtao728 不知道您解决转码啦吗?
    smallgoogle
        16
    smallgoogle  
       2019-11-13 20:09:07 +08:00
    @xmcp 有效吗?好像没啥效果。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   932 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 22:14 · PVG 06:14 · LAX 14:14 · JFK 17:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.