【问题标题】:HTTP 1.1 TE headerHTTP 1.1 TE 标头
【发布时间】:2026-02-07 01:30:01
【问题描述】:

在阅读 RFC2616 时,我遇到了用于分块编码的 TE 和 Transfer Encoding 标头。我对这些有以下问题:

  1. 如果 HTTP 服务器因为 TE 标头的存在而拒绝请求,它是否符合 RFC?
  2. 如果 HTTP 客户端发送带有 TE 标头和 t-coding 和 q 值列表的请求,并且一旦 q 值为 1,HTTP 服务器是否必须发送具有该编码的响应数据,例如:TE: defflat;q=0.5 gzip;q=1(这是否要求服务器在 gzip 中压缩实体数据并发送它,还是服务器可以忽略它并以正常方式发送数据?)。
  3. 如果 HTTP 服务器不支持接收分块数据(我知道它违反了 RFC,但这是有意的),那么正确的错误响应代码可能会被发送回客户端,以便客户端下次这样做不要以分块方式发送 PUT 请求。

提前感谢您的宝贵意见和回答。

【问题讨论】:

  • 请阅读 RFC 7230 和 7231,看看他们是否回答了这些问题。
  • 这是 RFC2616 的重新散列版本还是 RFC 中规定的任何新标准。
  • @VamsiMohan 723* 是 2616 的修订和更新版本,旨在阐明规范。称它们为“重制版”对于在这个项目中投入大量工作的人来说是一种冒犯,因为新规范是一个巨大的改进。
  • 对不起.. 我并没有冒犯的意思,但在我继续阅读它之前,我想先了解一下这个 RFC。再次道歉!!

标签: http rfc2616


【解决方案1】:

RFC 7230 中说,

请求中的“TE”标头字段指示传输编码,
除了分块之外,客户端还愿意接受响应,并且
客户端是否愿意接受 a
中的尾部字段 分块传输编码。

这推断 TE 只是客户端的声明,可以被下一个服务器忽略。 HTTP 服务器应该没有理由拒绝带有 TE 标头的请求。如果服务器不支持分块,则它不支持 HTTP 1.1,因此应该将传入请求解释为好像它是 1.0 请求并相应地响应。见here

【讨论】: