TCP是否对多个HTTP响应使用相同的响应

Does TCP use the same response for multiple HTTP responses

如果您请求 html 包含一些文本和图像的网页,我相信 http 使用 text/html 和 image/html 类型的 2 个响应。两个 http 响应是否放在同一个 TCP 响应中?

我认为这将是最有效的方法,除非服务器需要另一个图像请求。这让我想到了下一个问题,服务器是否期望每个 http 响应有多个请求,或者它是否可以只发送 html 页面所需的所有 http 响应?

即。

TCP(获取/)

TCP(HTTP 响应 1、响应 2、响应 3)

tcp 响应也可以是一个 http 响应的一小部分吗?例如,如果它大于最大数据包大小。

通常,图像有自己的 URL。在HTTP/1.x中,只有客户端可以发起请求。即使服务器可能知道客户端需要资源,它也无法将资源发送给客户端,并且必须等待接收来自客户端的资源请求。因此,图像是通过单独的 HTTP 请求获取的,从而获得单独的 HTTP 响应。

每个 HTTP 请求的 TCP 连接数:

关于 TCP 连接,单个连接可以用于多个 HTTP 请求,例如,在从同一服务器获取多个图像的情况下。但是,这仍然需要请求和响应的 FIFO 队列。因此,浏览器更喜欢每个 HTTP 请求单独的 TCP 连接

每个 HTTP 请求的 TCP 数据包数:

单个 HTTP request/response 可以跨越多个 TCP 数据包,如果它们不适合单个数据包。考虑一个 1 GB 的文件上传或下载请求 - 它是一个 request/response,将跨越多个数据包。

当服务器和客户端支持 "persistent connection" (Connection: keep-alive) 时,多个 HTTP 请求可以 pipelined 在一个 TCP 数据包中,如果它们可以适合。 试试这个:

(echo "HEAD /index.html HTTP/1.1\nHost: www.google.co.in\nConnection: keep-alive\n\nHEAD /index.html HTTP/1.1\nHost: www.google.co.in\n\n"; sleep 1) | telnet www.google.co.in 80

两个流水线 HEAD 请求显然适合一个数据包。

一般来说,如果 HTTP 请求在 single/multiple 个 TCP 数据包中有效负载,并且 将其留给 TCP 协议,我不会担心.同样适用于 HTTP 响应。

当你在讨论这个主题时,我建议你也阅读一些关于 HTTP/2 的文章:)