0

我有一个应用程序似乎gzip在向服务器发送数据时默认启用编码。

我们尝试gzip通过显式使用禁用压缩:

IXMLHttpRequest2::SetRequestHeader(L"Accept-Encoding", L"")(当然是在 HTTP 请求对象上)

这似乎仍然没有帮助。无论如何要禁用在 C++ 应用程序的 HTTP-Request 标头中启用的 GZIP?

谢谢!

4

1 回答 1

1

要求服务器不使用特定编码,您应该提供一个Accept-Encoding值列表。从RFC2616 (HTTP/1.1) 的第 14.11 节,您可以看到它具有以下形式之一(值是示例):

Accept-Encoding: compress, gzip
Accept-Encoding:
Accept-Encoding: *
Accept-Encoding: compress;q=0.5, gzip;q=1.0
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0

如果内容编码是 Accept-Encoding 字段中列出的内容编码之一,那么它是可接受的,除非它的 qvalue 为 0。(如第 3.9 节中所定义,a of 0 表示“不可接受”。)

然后要求服务器不使用gzip压缩,您应该提供以下值,而不是空字符串Accept-Encoding

gzip;q=0

这将要求服务器不要使用它,但您必须提供另一种编码。有关可用编码,请参见第 3.5 节。使用 qualityq参数通知服务器您的偏好(不要忘记,如果它不能为您的请求提供该编码,它将回复错误 406)。

identity;q=1.0, gzip=0.5

通过这种方式,您要求使用identity编码,如果它不可用,您也可以接受gzip编码(这将阻止服务器在由于任何原因无法为您的请求使用任何其他编码时回复错误)。您也可以尝试其他编码的性能(例如,compress和)。deflate

代码
然后,最后,您必须使用IXMLHttpRequest2::SetRequestHeader(L"Accept-Encoding", L"identity;q=1.0, gzip=0.5"). 在SetRequestHeader中,您会看到它是默认发送的标头的附加内容,因此如果您指定一个空字符串,则该值实际上不会更改(实际上它的解释方式可能取决于服务器,我没有找到任何适当的规范这,您可以检查您的 HTTP 请求和响应以检查实际发送/接收的内容)。

旧值:Accept-Encoding: compress
调用:IXMLHttpRequest2::SetRequestHeader(L"Accept-Encoding", L"")
新值:Accept-Encoding: compress

于 2013-03-06T08:22:16.063 回答