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

Incorrect response from the server anfter GET request

本文关键字:响应 不正确 服务器 请求 GET      更新时间:2023-10-16

当我在c++中发送带有"GET"的请求时,如下所示:

GET / HTTP/1.1rnHost: site.comrnrn

我得到了正确的答案。但是,当我根据浏览器的操作配置请求时(我从数据包嗅探器中捕获了标头),服务器的响应是200 OK,但html主体是一块垃圾。标题中显示的内容Length也证明了我没有得到正确的html响应。添加"Accept-Encoding:gzip,deflate"时会出现问题。我发送的正是浏览器发送的内容。但我收到的回复与浏览器不同。你认为为什么会发生这种事?

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

请注意,在返回的标头中,它将包括Content-Encoding: gzip,或者可能是deflate而不是gzip。这个告诉你关于编码。如果它是gzip,则需要使用类似zlib的库对其进行解压缩。

在对HTTP1.1请求的回复中,您可能会看到另一件事,即连接在完成时不一定会关闭,并且您可能会得到Transfer-Encoding: chunked,这将以不同的方式格式化正文。分块响应是一系列长度为十六进制的分块,然后是内容,最后是一个空分块。相比之下,未处理的响应是用Content-Length头发送的,它告诉您期望多少。内容长度是它发送的数据的长度,如果数据被压缩,这个长度会更小。

除非您实现解压缩,否则不要发送Accept-Encoding。不过,您可能必须实现分块响应,因为它在http1.1中很常见,如果只执行http1.0,则无法使用重要的主机标头。