当我在c++中发送"GET“请求时,如下所示:
GET / HTTP/1.1\r\nHost: site.com\r\n\r\n我得到了正确的答案。但是,当我根据浏览器所做的事情配置请求时(我从数据包嗅探器捕获了报头),来自服务器的响应是200,OK,但是html主体是一个垃圾。此外,标题中显示的内容长度也证明了我没有得到正确的html响应。当添加"Accept-Encoding: gzip,deflate“时会出现问题。我发送的正是浏览器发送的内容。但我收到的响应与浏览器不同。你认为为什么会发生这种事?
发布于 2013-12-14 02:39:49
如果您接受gzipped内容,服务器可能会发送gzipped内容。(事实上,一些错误的服务器发送压缩的内容,即使你没有说你接受它!)
请注意,在返回的头文件中,它将包含Content-Encoding: gzip,或者可能放气而不是gzip。这告诉你关于编码的事。如果它是压缩的,您需要使用像zlib这样的库来解压缩它。
在对HTTP1.1请求的答复中可以看到的另一件事是,连接完成后不一定会关闭,您可能会得到Transfer-Encoding: chunked,它将对主体进行不同的格式化。分块响应是一系列具有六进制长度的块,然后是内容,以一个空块结束。相反,非分块的响应是与Content-Length头一起发送的,它可以告诉您期望的金额。内容长度是它发送的数据的长度,如果数据被压缩,其长度将更小。
除非实现解压缩,否则不要发送Accept-Encoding。但是,分块的响应可能需要实现,因为它在HTTP1.1中很常见,如果只使用HTTP1.0,就不能使用重要的主机头。
https://stackoverflow.com/questions/20579049
复制相似问题