c++ - GET 请求后服务器的错误响应

标签 c++ html

当我像这样在 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/

相关文章:

html - Flexbox 图片库上的响应式文本叠加

c++ - 如何在一个 QTreeView 中组织 QStandardItemModel

C++11 写入文件也会写出内存位置?

c++ - c/c++ | int * 除外,给定 int (返回指针??)

c++ - 如何在 VS 2013 中使用 QT 4.8.x?

c++ - 拆分表达式但保留分隔符

javascript - 如何检测 div 上的内容更改事件

html - 多张图片导致整页页边距偏移

javascript - 如果 POST 路由使用 RegEx,我应该为 HTML 表单设置什么操作属性?

html - 如何修复此网站上的响应列?