【问题标题】:Does TCP use the same response for multiple HTTP responsesTCP 是否对多个 HTTP 响应使用相同的响应
【发布时间】:2015-04-23 09:37:51
【问题描述】:

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

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

即。

TCP (GET /)

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

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

【问题讨论】:

    标签: html http tcp


    【解决方案1】:

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

    当您讨论这个主题时,我建议您也阅读一下HTTP/2 :)

    【讨论】:

    • 当你说可以使用单个TCP连接时,你也是指单个TCP数据包吗?由于传输层不需要了解应用层,客户端不能发送多个http请求,比如说在同一个TCP请求中的同一个html页面上的多个图像?并且服务器不能发送一个 TCP 响应和多个 HTTP 响应吗?
    • 所以看起来我可以根据:superuser.com/questions/602310/… 将多个 http 请求/响应放入一个 TCP 数据包中。可以将 http 响应拆分为 2 个 TCP 数据包吗?谢谢
    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2020-06-23
    • 1970-01-01
    • 2014-05-14
    相关资源
    最近更新 更多