我有一个问题,当 HEAD 发送到资源并且服务器决定执行分块编码时,HTTP 服务器响应如何?
如果服务器总是希望对特定资源的 GET 执行分块编码,因为它在生成响应时不知道确切的内容长度,那么当在同一资源上发送 HEAD 时服务器应该如何表现。
我有一个问题,当 HEAD 发送到资源并且服务器决定执行分块编码时,HTTP 服务器响应如何?
如果服务器总是希望对特定资源的 GET 执行分块编码,因为它在生成响应时不知道确切的内容长度,那么当在同一资源上发送 HEAD 时服务器应该如何表现。
Transfer-Encoding 头域是有效载荷的一个方面。对于 HEAD 响应,您没有有效负载,因此没有 Transfer-Encoding 标头字段;即使它会在 GET 上使用。
根据W3C 的规范:
响应 HEAD 请求的 HTTP 标头中包含的元信息应该与响应 GET 请求发送的信息相同。
这意味着如果对 GET 请求Transfer-Encoding: chunked
的响应包含,那么对相应 HEAD 请求的响应也应该包含该标头。
您可以在野外验证这一点:
curl -I http://www.google.com/ # -I sends HEAD request
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2015 17:56:05 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Alternate-Protocol: 80:quic,p=0.02
Transfer-Encoding: chunked