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 的文章:)
如果您请求 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 的文章:)