Devtools PC端Remote Debug下chunked模式解析错误
代码业务场景 基于chunked模式与后台通信,实现数据交换。 同一套代码,测试运行正常的运行场景: 1 在DevTool的开发环境下,运行正常。 2 在Remote Debug模式下,IOS端测试运行正常。 3 在体验版本下,IOS端运行正常 运行失败的场景: 1 在体验版下,PC端运行出错 2 在Remote Debug模式下,PC端运行出错 错误信息: 文字描述:servicewechat.com/wx…c939e3/0/index.js:3 Uncaught ReferenceError: global is not defined [图片] 由于无法直接看到index.js下的代码,所以无从定位问题,只能从现象看做推理了..... 分析过程以及初步得到的信息: 在Debug模式下,抓取IOS的请求如下: [图片] [图片] 在PC端的Debug模式下抓取同一个请求如下: [图片] [图片] 其中两者的差异: 1 响应中缺少了Transfer-Encoding:chunked的设置。(经过分析,Http2本身就不会返回上述信息) 2 二者使用http协议分别为1.1 和2 初步推测的可能: 分析1: 表面原因: The provided value 'stream' is not a valid enum value of type XWebXMLHttpRequestResponseType. 基于上述推测,在http2模式下,content-type: text/event-stream的不支持导致了global is not defined的error 分析2: 在目前nginx中的关键配置如下: server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
proxy_buffering off;
chunked_transfer_encoding on;
location /wx/api/v1/ {
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8090/wx/api/v1/;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_ssl_session_reuse off;
proxy_ssl_server_name on;
proxy_ssl_name $proxy_host;
proxy_ssl_protocols TLSv1
}
其中开启了http2的支持,同时在proxy_http_version中指定了1.1版本。 按照设置,应该可以兼容http2的请求,并将结果顺利返回的。 分析3: 基于在IOS端,可以正常运行和访问的情况来推测,可以理解有以下两种可能性: 可能1: PC端默认使用http2,但是对于stream/chunked模式不支持,或支持的不完整,导致上述问题。 可能2: Nginx配置可能有问题,但是从已有资料来说,个人理解应该不是(如果说的不准确,欢迎大家拍砖)。 可能的解决方案: 方案1: 在PC端,与IOS端保持步调一致,使用http1.1,且支持完整(这里假定http1.1的stream模式之前就已经支持是完整的,只需做一下协议的降级即可,至少在mobile端是OK的) 方案2: 保持http2不变,修复上述问题(微信的responseType支持text和arraybuffer两种) 求助期望 希望帮忙看看这个问题,是否理解正确,且希望能够帮忙定位和解决一下。