如何以编程方式检查Web服务器是否启用了http压缩?

时间:2009-02-27 02:10:49

标签: .net http compression

我想检查Web服务器是否启用了http压缩,是否启用了特定的压缩(即Gzip,Deflate,Compress)?

或者如果我通过将接受编码设置为“gzip,deflate”来通过.net中的WebClient对象请求数据,在处理之前如何知道检索到的数据是否被压缩?

3 个答案:

答案 0 :(得分:9)

要检查响应正文的编码是什么,您应该检查HTTP响应标头:Content-Encoding。

仅允许服务器使用请求标头accept-encoding指定的编码。如果服务器无法使用指定的accept-encodings之一给出响应,则它必须以406(不可接受)响应。

请求示例:

GET / HTTP/1.1
Host: www.brianbondy.com
Accept-Encoding: gzip,deflate

示例回复:

HTTP/1.1 200 OK
Date: Thu, 04 Dec 2003 16:15:12 GMT
Server: Apache/2.0
Content-Encoding: gzip
Content-Length: 1533

接受编码的其他示例:

 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: gzip, identity;q=0

Source of examples, HTTP RFC

答案 1 :(得分:4)

来自HTTP spec

  

4。除非,“身份”内容编码总是可以接受的          特别拒绝,因为Accept-Encoding字段包括          “identity; q = 0”,或者因为该字段包含“*; q = 0”而且确实如此          没有明确包括“身份”内容编码。如果          Accept-Encoding字段值为空,然后只有“身份”          编码是可以接受的。

因此,如果设置Accept-Encoding: identity;q=0, gzip, deflate,则强制服务器对其进行压缩,或者返回406(不可接受)。

答案 2 :(得分:0)

这可能会有所帮助。

http://www.whatsmyip.org/http_compression/