问题描述
我们有一个提供静态资产的 Web 服务器。我们遇到了一个问题,即在您浏览一些 http 请求后,它们会卡在“待处理”状态。在 chrome 检查器中,响应标头做返回,但请求没有超时,看起来好像正在下载。在时间线视图中,“等待(ttfb)”是最后填写的项目(例如 400ms),然后有一条注释“注意:请求尚未完成!”
此问题似乎仅限于 Chrome,以及网站运行 https 时。我们无法在 safari、ff、ie 上重现此问题,如果 https 关闭,我们也无法重现此问题。
重现采取的步骤
- 打开 chrome 隐身模式
- 打开检查工具>网络选项卡
- 导航至网站
- 通常第一页和它的所有请求都完成
- 浏览另一个页面
- 意外行为:页面部分内容未加载;xhr 请求通常针对 .html 文件和 jpg 图像。在 chrome 的网络选项卡中检查时,它们显示“待处理”
奇怪的注释:
- 按照上述步骤操作后,如果您在新选项卡中打开“待处理”请求,则选项卡会“旋转”
- 如果您关闭第一个选项卡,则第二个带有“待处理”url 的选项卡将解析,这会导致我们研究保持活动和超时,但无济于事。
- 有时,这个完整的问题也会在第一次请求时出现(文档)
环境注意事项:
- 前端是 angularjs,通过 chrome 访问其他浏览器好像没有这个问题
- 服务器运行 https,通配符证书( *.domain.com )
nginx 版本 1.9.3
# some variables we've tweaked worker_processes 4; worker_connections 4000; keepalive_timeout 15; client_body_timeout 12; gzip on
nginx 日志没有抱怨任何事情
- 当服务器负载很大时,CPU / RAM 永远不会接近极限
- 响应标头包括;etag、gzip、content-type、date、last-modified、server、status(200)、strict-transport-security:max-age=604800...
- 更改 chrome 的“禁用缓存”复选框似乎没有效果
- 我们在不同的电脑上使用 Chrome 浏览器时都遇到过这种情况。我最高运行的是 44.0 64 位版本
根据这些问题,该错误感觉像是某种类型的服务器配置问题,我们认为它与证书无关,但它只影响 chrome 这一事实确实很奇怪。
答案1
关于此问题或类似问题的信息很多,但没有任何解决方案对我有用。经过一番挖掘,以下是添加到服务器的响应标头['连接'] ='关闭'
答案2
考虑wireshark
使用 Chrome 开发人员工具来分析网络流量。
在 Chrome 中打开网络调试器并尝试重现卡住的请求。它将显示一个精确的时间线:请求标头何时完全发送、请求内容何时发送、等待回复、响应标头何时完全接收、内容的第一个字节何时接收、内容的最后一个字节何时接收(如果完成)。
确定问题处于哪个阶段很重要?
如果一开始,Web 服务器就没有收到请求,那么可能根本就无法建立连接。
如果它卡在等待内容结束,则意味着 Web 服务器已完全接收并处理了请求,您应该能够在 Web 服务器日志中看到该请求,并带有状态代码,也许是错误?
我在现实世界中遇到过很多会破坏响应或减慢传输速度的事情。
积极的流量整形。不得不在伦敦的一个办公室工作,与亚洲服务器进行通信。响应的第一个 MB 很顺利,然后传输速度被限制在 20 KB/s。它没有坏,只是慢得令人难以置信。
代理问题,尤其是 MITM 代理。它们可能会无缘无故地中断连接或保持连接。我在银行工作时曾经使用过完整的 MITM 代理,有时它会无缘无故地花 5 分钟才能打开 Google.com,这太烦人了,不过其他 99% 的时间都运行良好。
HTTP/2(以前称为 SPDY)和 TLS 1.3 问题。信不信由你,但这些在推出的头几年里漏洞百出(截至 2020 年,仍有一些极端情况)。任何开发人员都应该明白,没有代码在第一次尝试时是完美的,需要一段时间才能消除错误和极端情况。不幸的是,这些东西真的需要跨系统完美运行,否则就会出问题(浏览器、负载平衡器、Web 服务器等)。相信我,当你在组织中需要管理数十或数百个应用程序(在几个不同的堆栈上)时,你不会想成为新协议的早期采用者。
Chrome 漏洞。Chrome 和其他复杂软件一样存在漏洞,尤其是因为它发展迅速,而且经常故意强迫你接受新东西。我可以用 HTTP/2 来举例,Chrome 是第一个实现该协议的浏览器,当然第一次尝试并不完美,所以会出现一些漏洞。Chrome 也是第一个默认启用该协议的浏览器,当然这会导致不兼容弹出,你无法摆脱它。当你遇到奇怪的问题时,可以考虑尝试上一个/下一个版本的 Chrome 或其他浏览器。
防病毒软件。防病毒软件会过滤所有连接和进出计算机的所有流量。如果你不了解 Windows 防病毒软件的工作原理,它们会拦截所有网络系统调用。它们并非完美无缺,可能会严重破坏连接。我可以告诉你,我花了很多时间调试一个影响少数员工的问题,一个软件通过 HTTP 下载配置应该需要 1 秒钟,但对他们来说却需要 10 分钟到 2 小时。我们追踪到问题出在 Symantec 防病毒软件导致连接中断(1 KB/s),在尝试分析流量或确定是否应允许连接时一定存在错误。然后反复与支持人员联系,试图修复它或找到不会发生这种情况的设置。