2013-12-14 32 views
0

。但是,当我根据浏览器配置请求(我从数据包嗅探器捕获到头文件)时,来自服务器的响应是200 OK,但是html body是一块垃圾。此外,头文件中显示的content-Length证明我没有得到正确的html响应。 添加“Accept-Encoding:gzip,deflate”时会出现问题。我发送的是浏览器发送的内容。但是我收到了不同于浏览器的回应。 你为什么认为这会发生?响应不正确anfter当我发送带有“GET”在C++这样的请求,GET请求

+4

服务器正在发回gzip内容。您需要将其解压缩以使其可读。 – AVP

+0

感谢您的回答。但正如我所说,浏览器的响应头中的“Content-Length”字段与我的不同。例如,浏览器收到“Content-Length:17000”,但我收到“Content-Length:4000”。这怎么可能? – user2808671

+0

使用Fiddler捕获并比较您发送的请求/响应和浏览器发送的内容。 –

回答

2

如果接受gzip内容,服务器可能会发送gzip内容。 (实际上,即使你不说你接受它,一些有问题的服务器也会发送gzip压缩的内容!)

请注意,在返回的头文件中,它将包含Content-Encoding: gzip,或者可能是deflate而不是gzip。这告诉你有关编码。如果它被压缩,你需要使用类似zlib的库来解压缩它。

您在HTTP 1.1请求的回复中可能会看到的另一件事是,连接在完成时不一定会关闭,并且您可能会得到Transfer-Encoding: chunked,它将以不同方式格式化本体。分块响应是一系列具有十六进制长度的块,然后是内容,由一个空块结束。相反,非分块的响应与Content-Length标题一起发送,这告诉你期望有多少。内容长度是它发送的数据的长度,如果数据被压缩,它将会更小。

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