在 Mac OS 上挂起连接
Hanging connections on Mac OS
在我的服务器上请求资源时,Mac OS 出现网络问题(问题不是一直存在)。但是,我可以通过使用 JavaScript 按顺序 请求随机资源 1000 次 .
来重现该问题
var req = (id) => fetch('https://www.example.com/my/resource/starter.js?' + id);
// use the 'limit' as identifier
var doRecursiveRequest = (limit) =>
req(limit).then(res => {
if (--limit) {
return doRecursiveRequest(limit);
}
});
doRecursiveRequest(1000);
在网络选项卡中,我看到资源加载速度非常快。请求计数器计数非常快,突然停止。之后大约需要 30 秒,直到再次停止(总是在几百次请求之后)。一段时间后,所有请求将成功完成。
通过使用 Google Devtools(性能选项卡),我可以看出问题所在,但我不明白原因。
在某些时候,有 6 个并行网络任务 运行(全部由我的 JavaScript 执行)。似乎 Chrome 最多允许 6 个这样的并行微任务。之后最多需要 30 秒,直到一个 "killed" (?!) 并允许下一个开始。但是,在服务器端,响应时间都非常快(所有 1000 个请求都已到达服务器并已发送响应)。
附加信息:
- 我只在 Mac OS(Google Chrome、Safari 和 Firefox)上遇到这个问题
- 在 Windows 10 上,它按预期工作;没有待处理的请求(除了来自服务器的响应时间)
- 打印屏幕来自 Windows 机器,但记录的 chrome-dev 配置文件位于 Mac OS
- 系统详细信息:MacBook Pro / OS X El Capitan(版本 10.11.6)/ Google Chrome 76.0.3809.132(64 位)
事实证明,带有 Keep-Alive
Header 的 HTTP 响应导致了问题。禁用 keep alive 机制并添加 Content-Length
Header 后,问题不再重现。
这似乎是一个已知问题,请参阅 https://whosebug.com/a/25996971/9816335
在我的服务器上请求资源时,Mac OS 出现网络问题(问题不是一直存在)。但是,我可以通过使用 JavaScript 按顺序 请求随机资源 1000 次 .
来重现该问题var req = (id) => fetch('https://www.example.com/my/resource/starter.js?' + id);
// use the 'limit' as identifier
var doRecursiveRequest = (limit) =>
req(limit).then(res => {
if (--limit) {
return doRecursiveRequest(limit);
}
});
doRecursiveRequest(1000);
在网络选项卡中,我看到资源加载速度非常快。请求计数器计数非常快,突然停止。之后大约需要 30 秒,直到再次停止(总是在几百次请求之后)。一段时间后,所有请求将成功完成。
通过使用 Google Devtools(性能选项卡),我可以看出问题所在,但我不明白原因。
在某些时候,有 6 个并行网络任务 运行(全部由我的 JavaScript 执行)。似乎 Chrome 最多允许 6 个这样的并行微任务。之后最多需要 30 秒,直到一个 "killed" (?!) 并允许下一个开始。但是,在服务器端,响应时间都非常快(所有 1000 个请求都已到达服务器并已发送响应)。
附加信息:
- 我只在 Mac OS(Google Chrome、Safari 和 Firefox)上遇到这个问题
- 在 Windows 10 上,它按预期工作;没有待处理的请求(除了来自服务器的响应时间)
- 打印屏幕来自 Windows 机器,但记录的 chrome-dev 配置文件位于 Mac OS
- 系统详细信息:MacBook Pro / OS X El Capitan(版本 10.11.6)/ Google Chrome 76.0.3809.132(64 位)
事实证明,带有 Keep-Alive
Header 的 HTTP 响应导致了问题。禁用 keep alive 机制并添加 Content-Length
Header 后,问题不再重现。
这似乎是一个已知问题,请参阅 https://whosebug.com/a/25996971/9816335