获取请求后服务器的响应不正确 当我在C++中用“GET”发送请求时: GET / HTTP/1.1\r\nHost: site.com\r\n\r\n

获取请求后服务器的响应不正确 当我在C++中用“GET”发送请求时: GET / HTTP/1.1\r\nHost: site.com\r\n\r\n,c++,html,C++,Html,我得到了正确的答案。但是,当我根据浏览器所做的配置请求时(我从包嗅探器捕获了头),服务器的响应是200 OK,但html正文是一块垃圾。标题中显示的内容长度也证明我没有得到正确的html响应。 添加“接受编码:gzip,deflate”时会出现问题。我发送的正是浏览器发送的内容。但我收到的回应与浏览器不同。 您认为为什么会发生这种情况?如果您接受gzip内容,服务器可能会发送gzip内容。(事实上,一些有缺陷的服务器发送Gzip内容,即使你不说你接受它!) 请注意,在返回的标题中,它将包括内容编

我得到了正确的答案。但是,当我根据浏览器所做的配置请求时(我从包嗅探器捕获了头),服务器的响应是200 OK,但html正文是一块垃圾。标题中显示的内容长度也证明我没有得到正确的html响应。 添加“接受编码:gzip,deflate”时会出现问题。我发送的正是浏览器发送的内容。但我收到的回应与浏览器不同。
您认为为什么会发生这种情况?

如果您接受gzip内容,服务器可能会发送gzip内容。(事实上,一些有缺陷的服务器发送Gzip内容,即使你不说你接受它!)

请注意,在返回的标题中,它将包括
内容编码:gzip
,或者可能是deflate而不是gzip。这将告诉您有关编码的信息。如果它是gzip,则需要使用类似于
zlib
的库对其进行解压缩

在对HTTP 1.1请求的回复中,您可能会看到另一件事,即连接完成后不一定会关闭,您可能会得到
传输编码:chunked
,这将以不同的格式格式化正文。分块响应是一系列具有十六进制长度的分块,然后是内容,以空分块终止。相比之下,非分块响应发送时带有
内容长度
标题,该标题告诉您期望值。内容长度是它发送的数据的长度,如果数据被压缩,它将变小


除非实现解压缩,否则不要发送
接受编码。但是,您可能必须实现分块响应,因为它在http 1.1中很常见,如果您只执行http 1.0,您将无法使用重要的主机头。

服务器正在发回gzip内容。您需要对其进行g-unzip以使其可读。谢谢您的回答。但正如我所说,浏览器响应标题中的“内容长度”字段与我的不同。例如,浏览器收到“内容长度:17000”,但我收到“内容长度:4000”。怎么可能呢?使用Fiddler捕获和比较您发送的请求/响应以及浏览器发送的内容。我正是在使用Fiddler。我从未使用过Fiddler,但搜索web显示它有可能为您解压数据的选项。