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

时间:2015-02-21 19:44:55

标签: html http tcp

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

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

即。

TCP(GET /)

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

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

1 个答案:

答案 0 :(得分:1)

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

每个HTTP请求的TCP连接:

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

每个HTTP请求的TCP数据包:

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

当服务器和客户端支持“持久连接”(Connection: keep-alive)时,如果可以放入多个HTTP请求,则可以在单个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请求是在单个/多个TCP数据包中加载,而将其留给TCP协议。同样适用于HTTP响应。

当你谈到这个问题时,我会建议你在SPDY阅读一些内容:)