【问题标题】:Web server - when should I use chunked transfer encoding?Web 服务器 - 我什么时候应该使用分块传输编码?
【发布时间】:2010-10-24 22:33:33
【问题描述】:

查看各种网络服务器的 HTTP 标头,我注意到 Google.com 有:

client-transfer-encoding: "chunked"

什么是分块传输编码,我应该在我的网络服务器上使用它吗?

【问题讨论】:

  • 顺便说一下,我运行的是 Apache 2.x Web 服务器

标签: apache encoding webserver chunked-encoding


【解决方案1】:

Chunked 可用于分多部分发送 HTTP 请求或响应,并在后续部分不可用时发送一部分。

多个请求-响应对可以通过单个 HTTP 连接传输。 (这是为了避免后续请求的 TCP connect() 开销。)为了实现这一点,客户端需要知道服务器响应在哪里结束。如果服务器生成 Content-Length 标头,则客户端可以对字节数进行倒计时。当没有字节要读取时,客户端可以发起下一个请求。但是,如果服务器事先不知道完整响应的长度,它如何生成 Content-Length 标头?解决方案是使用 chunked 而不是 Content-Length

Apache(1.3 和 2)默认情况下,只要有意义(并且 HTTP 客户端支持),就会将静态文件作为 chunked 发送。您不必采取任何行动。如果您编写自己的 Web 应用程序,您可能会考虑手动生成分块响应。

请参阅http://www.research.att.com/~bala/papers/h0vh1.htmlhttp://developers.sun.com/mobility/midp/questions/chunking/ 了解更多信息。

【讨论】:

  • 这与 http 1.1 keep-alives 有什么关系?它们本质上是一样的吗,还是 Web 服务器即使不支持 keep-alives 也可以发送分块响应?
  • 没有keep-alive也可以使用chunked,但这没有意义,因为没有keep-alive的chunked没有任何好处。
  • pts 我不认为这是正确的,需要在单个连接中发送一个块,否则将没有一个块与两个相关的上下文..想象一个服务器接收大量连接从块开始(只是一个十六进制长度,crlf 然后是有效负载)。
猜你喜欢
  • 2011-09-25
  • 2010-09-17
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2012-09-22
相关资源
最近更新 更多