GET请求后服务器的响应不正确

时间:2013-12-14 02:30:35

标签: c++ html

当我在c ++中发送带有“GET”的请求时,这样:

GET / HTTP/1.1\r\nHost: site.com\r\n\r\n

我收到了正确的答案。但是当我根据浏览器的配置来配置请求时(我从数据包嗅探器捕获了标头),来自服务器的响应是200 OK但是html主体是一块垃圾。此外,标题中显示的内容长度证明我没有得到正确的html响应。 添加“Accept-Encoding:gzip,deflate”时会出现问题。我发送了确切的浏览器发送内容。但我收到的反应不同于浏览器。 为什么你认为这会发生?

1 个答案:

答案 0 :(得分:2)

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

请注意,在返回的标头中,它将包含Content-Encoding: gzip,或者可能是deflate而不是gzip。这会告诉您编码。如果是gzip,则需要使用zlib等库进行解压缩。

您在回复HTTP 1.1请求时可能会看到的另一件事是连接在完成时不一定会关闭,而您可能会得到Transfer-Encoding: chunked,这会以不同方式格式化主体。分块响应是一系列具有十六进制长度的块,然后是内容,以空块结束。相比之下,非分块响应使用Content-Length标头发送,告诉您预期会有多少。内容长度是它发送的数据的长度,如果压缩数据则会更小。

除非您实施解压缩,否则请勿发送Accept-Encoding。分块响应是您可能必须实现的,因为它在http 1.1中很常见,如果只执行http 1.0,则不会使用重要的主机头。