我有一个在端口 80 上监听的远程 Web 服务器,该服务器提供一个页面,该页面通过 100 个标签加载 100 个单独的.png
文件(来自相同的服务器和主机名) 。我在该远程服务器上执行此操作(我的客户端计算机的外部 IP 在哪里),当我访问该页面时,我通常会看到从我的客户端计算机到服务器建立大约 5-6 个连接。我使用 chrome 或 Firefox 执行该页面请求,并通过使用 F12 开发工具检查其中任何一个请求(页面或任何 png 文件的请求),我可以看到请求标头。我还通过查看 Web 服务器日志确认所有这些请求都是使用我认为默认使用 keep alive 完成的。<img />
watch -n 1 "netstat -na | fgrep ":80 " | fgrep 123.123.123.123"
123.123.123.123
Connection:keep-alive
HTTP/1.1
所有上述事实和观察意味着 101 个请求(1 页 + 100 个 png)经过 5-6 个连接,而不是通过 101 个连接。
我的问题是,如何在 chrome 或 Firefox 中禁用保持活动?
在 Firefox 中我尝试设置以下内容about:config
但它并没有改变这种行为:
network.http.keep-alive.timeout;0
network.http.tcp_keepalive.long_lived_connections;false
network.http.tcp_keepalive.long_lived_idle_time;0
network.http.tcp_keepalive.short_lived_connections;false
network.http.tcp_keepalive.short_lived_idle_time;0
network.http.tcp_keepalive.short_lived_time;0
network.tcp.keepalive.enabled;false
network.tcp.keepalive.idle_time;0
network.tcp.keepalive.retry_interval;0
如果我必须在操作系统级别(Windows 或 Linux)上做一些事情来禁用保持活动,使用不同的(甚至是自定义的)浏览器,甚至使用某种可以取消此行为的 Web 代理,那就没问题了。
答案1
HTTP 保持连接意味着客户端向服务器宣布它希望保持 TCP 连接打开以处理更多请求,并要求服务器不要关闭它。服务器可能会遵守这个愿望,也可能不会。由于服务器似乎在您的控制之下,因此可能更容易在服务器上禁用保持连接,从而导致所有浏览器的保持连接都停止。目前尚不清楚您使用的是哪种服务器,但相关配置nginx 的相关信息请点击此处和对于 Apache。
但是,虽然在服务器上禁用或限制 HTTP keep-alive 以减少使用的资源是有意义的,但我想知道你为什么要在客户端禁用它。虽然看看会发生什么可能很有趣,但你在一种浏览器中看到的行为并不适用于其他浏览器,也不适用于确定特定页面的服务器负载,因为即使没有 HTTP keep-alive,浏览器仍然只会使用有限数量的并行连接,而不是并行发送所有请求。而且,确切的行为取决于浏览器和配置。
答案2
以前在 Firefox 中,这是可以实现network.http.keep-alive
的不再存在, 因为持久连接是 HTTP/1 性能最重要的特性之一。
您network.http.keep-alive.timeout;0
无法工作,因为没有任何空闲时间;浏览器会立即再次使用连接,因为还有更多文件需要处理GET
。
即使没有保持活动功能,浏览器也可能会很礼貌地在最后一个连接结束后启动单独的连接,而不是同时打开 101 个连接。
由于这与保持活动无关,而是与同时连接的数量有关,因此您可以使用 Firefox 进行测试network.http.max-persistent-connections-per-server; 101
。但是,我不太确定它是否允许使用高得离谱的值...