• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hhacker
19.96D
2.29D
V2EX  ›  程序员

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

  •  
  •   hhacker ·
    PRO
    · Dec 25, 2017 · 10276 views
    This topic created in 3242 days ago, the information mentioned may be changed or developed.
    • 微信浏览器默认会代理你的所有页面访问,包括 ajax 操作
    • 现在遇到一个超级无语的表现,在页面里 ajax post 时,如果微信的默认代理走通了,那业务表现正常,但是如果它这个代理不知道因为什么失败了或者便秘了,会要等待 4s 左右开启直连,直连的话其实一切是正常的
    • 只有部分安卓机型(小米手机,MIUI )出现,时而走代理时而不走代理,不走代理的时候基本都逃不过那等的 4s
    • 代理地址是这样的 Remote Address:163.177.73.12:8080
    • 感觉事情变成了玄学,服务器在它阻塞的 4s 里并没有收到请求
    16 replies  •  2019-11-13 20:09:07 +08:00
    hhacker
    hhacker
    OP
    PRO
    Dec 25, 2017
    1
    目前能够使用的解决方案是:要么用 get 要么上 https
    kslr
    kslr
    Dec 25, 2017
    2
    代理从谁哪里?微信服务器?
    w88975
    w88975
    Dec 25, 2017
    3
    感觉并不是走代理 而是微信的网页安全检查
    chairuosen
    chairuosen
    Dec 25, 2017
    4
    卧槽这是个大新闻啊,微信在监听并拦截所有 http POST 请求?
    hhacker
    hhacker
    OP
    PRO
    Dec 25, 2017
    5
    可以肯定是微信的服务器,这个无需震惊吧,这个很多人已经确认过了啊
    hhacker
    hhacker
    OP
    PRO
    Dec 25, 2017❤️1
    6
    #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
    kslr
    Dec 25, 2017
    7
    @hhacker #6 可是 X5 的文档可从来没有这样说过啊,我们也在用 X5。
    Biwood
    Biwood
    Dec 25, 2017
    8
    非常非常恶心,手机 QQ 内置浏览器会劫持链接跳转到腾讯自己的网址然后再跳转回去,这个劫持不是在初次打开网址的时候,而是每一次跳转都劫持,我真是对这家公司没有任何好感。
    run2
    run2
    Dec 25, 2017
    9
    关键是如何判断来自 x5 垃圾请求,并回复给它 408(能解决么? 408 )
    huangtao728
    huangtao728
    Dec 25, 2017 via Android
    10
    实测了真的有这个现象,我之前遇到的是微信会强制转码一个我自己的网站,不能通过申诉关闭,只能绑定成为公众号业务域名避免
    现象是在一个用户的正常访问后,会有一个来自深圳电信的 IP 伪装成一台 iPhone 模拟访问,并缓存转码,之后访问的用户通通呈现这个转码版本

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

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

    当时同时也阉割了特供版页面里网站的某些功能,比如登录,编辑,目的是逼着用户不在微信内浏览,现在看来还是有点远见啊
    xmcp
    xmcp
    Dec 26, 2017
    12
    去年研究过微信的转码,发现微信不会转码错误页面。所以在 nginx 里加一条规则,看到 nsukey 参数强行把状态码设成 403,响应正文不变,这样就不会转码了。
    AV1
    AV1
    Dec 26, 2017
    13
    同被这种机制恶心到了
    hhacker
    hhacker
    OP
    PRO
    Dec 26, 2017
    14
    翻 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
    smallgoogle
    Nov 13, 2019
    15
    @huangtao728 不知道您解决转码啦吗?
    smallgoogle
    smallgoogle
    Nov 13, 2019
    16
    @xmcp 有效吗?好像没啥效果。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2327 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 13:17 · PVG 21:17 · LAX 05:17 · JFK 08:17
    ♥ Do have faith in what you're doing.