HTTP 1.1 GET 请求太快,服务器无法响应,导致 TCP 重传

Posted

技术标签:

【中文标题】HTTP 1.1 GET 请求太快,服务器无法响应,导致 TCP 重传【英文标题】:HTTP 1.1 GET requests are too quick for server to respond causing TCP Retransmission 【发布时间】:2021-05-09 07:56:54 【问题描述】:

我正在 MCU 上制作一个带有 RTOS 的网络服务器。 网络库使用 HTTP 1.0 并关闭 TCP 套接字并在每次请求后重新侦听。

我服务的网页有多个 .js 文件,需要在 html 完全加载后加载。

发送 html 内容后,Web 浏览器会立即发送“GET /file.js HTTP/1.1”消息。然后,在 Web 服务器最终能够处理此消息之前,使用 TCP 重传重传此消息 3 或 4 次。

问题1:这种快速传输是否是由于Web浏览器仍在尝试不关闭连接的HTTP 1.1协议?来自我们服务器的内容状态回复消息是 HTTP 1.0,但 Web 浏览器不断请求使用 HTTP 1.1 的 GET。

问题 2:有没有办法让 Web 浏览器放慢速度,以免 TCP 重传导致网络拥塞?

任何建议都有帮助。

【问题讨论】:

【参考方案1】:

做一个 HTTP/1.1 请求但得到一个 HTTP/1.0 响应是完美的。服务器无法让客户端减速:因为每个新请求都是通过新的 TCP 连接完成的,所以没有可能用于此的 TCP 流控制。

问题在于您的服务器显然无法同时处理多个请求。这意味着所服务的内容的设计方式应该首先不需要此类请求:而不是在同一页面中嵌入多个资源,而应该构建站点以仅检索少数资源。例如,这可以通过将多个 javascript 文件合并为一个文件并过度使用客户端缓存(即设置正确的 Cache-Control 标头)来完成。

【讨论】:

谢谢。我将研究“Cache-Control”标头。也许我可以用 HTML 数据预加载内容。

以上是关于HTTP 1.1 GET 请求太快,服务器无法响应,导致 TCP 重传的主要内容,如果未能解决你的问题,请参考以下文章

HTTP/1.1 401 在 GET 请求的负载运行器的响应标头中未经授权

HTTP请求方法 之 HEAD

HTTP请求报文和响应报文

HTTP请求方法都有哪些

HTTP/1.1 响应多个范围

HTTP概念