当我像这样在 C++ 中使用“GET”发送请求时:
GET / HTTP/1.1\r\nHost: site.com\r\n\r\n
我收到了正确的答案。但是当我根据浏览器的行为配置请求时(我从数据包嗅探器中捕获了 header ),服务器的响应是 200 OK 但 html 正文是一 block 垃圾。 header 中显示的内容长度也证明我没有得到正确的 html 响应。 添加“Accept-Encoding: gzip, deflate”时会出现问题。我发送浏览器发送的内容。但是我收到的响应与浏览器不同。 你认为为什么会发生这种情况?
最佳答案
如果您接受压缩后的内容,服务器可能会发送压缩后的内容。 (事实上 ,即使您不说您接受,一些有问题的服务器也会发送 gzip 压缩的内容!)
请注意,在返回的 header 中,它将包含 Content-Encoding: gzip
,或者 deflate 而不是 gzip。这告诉您有关编码的信息。如果它是 gzip 压缩的,则需要使用 zlib
之类的库将其解压缩。
您可能会在对 HTTP 1.1 请求的回复中看到的另一件事是连接完成后不一定会关闭,您可能会得到 Transfer-Encoding: chunked
,这将格式化正文不同的。分块响应是一系列具有十六进制长度的 block ,然后是内容,以空 block 终止。相比之下,非分块响应与 Content-Length
header 一起发送,它会告诉您期望多少。 content length是它发送的数据的长度,如果数据经过压缩会变小。
除非你实现解压缩,否则不要发送Accept-Encoding
。不过,您可能必须实现分块响应,因为它在 http 1.1 中很常见,如果您只执行 http 1.0,您将无法使用重要的主机 header 。
关于c++ - GET 请求后服务器的错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579049/