-2

从标头接收原始响应时http://www.google.com/丢失Content-Length。相反,要接收的字节数放置在标头代码的末尾\r\n\r\n但实际内容之前。

我查看了原始响应和8000包含\r\n行尾的内容。

部分谷歌回应

标题

HTTP/1.1 200 OK
Date: Tue, 28 Oct 2014 18:38:37 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: ...
Set-Cookie: ...
P3P: ...
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Alternate-Protocol: 80:quic,p=0.01
Transfer-Encoding: chunked

标头结尾(由 '\r\n\r\n' 表示)

8000     # has '\r\n', I am assuming this is the content-length?

<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head><meta content...`

结束响应

所以我的问题是为什么谷歌如此特别,以至于他们可以搞砸我对 HTTP 轮子的重新发明。如果我应该在我的所有回复中或仅来自谷歌的回复中考虑到这种情况。

4

1 回答 1

2

您应该从所有回复中考虑这种可能性,因为它很常见。这没有什么是“特殊的”,这确实是完全合法的行为。

您假设内容长度实际上是块大小,根据服务器响应的块传输编码。

当遇到块大小为 0 时响应完成,因此分块响应的有效内容长度等于块大小的总和。

自 1999 年以来,这一直是 HTTP 规范的一部分。

于 2015-01-09T18:49:33.010 回答