2009-02-27 36 views
7

我想檢查Web服務器是否啓用了http壓縮,並且啓用了特定的壓縮(即Gzip,Deflate,Compress)?如何以編程方式檢查Web服務器是否啓用了http壓縮?

或者如果我通過WebClient的對象在.NET中通過設置接受編碼爲「gzip的,放氣」我怎麼能知道我之前處理它獲取的數據是否被壓縮請求數據?

回答

9

要檢查響應體的編碼是什麼,你應該檢查HTTP響應頭:內容編碼。

服務器只允許使用由接受編碼的請求報頭中指定的編碼。如果服務器無法使用指定的接受編碼之一給出響應,則它必須以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

+0

但是,身份編碼(即不壓縮)總是被允許的,除非你明確禁止它。因此,如果服務器返回Content-Encoding:標識,您仍然不知道它是否支持壓縮;它可能只是選擇不壓縮這個特定的響應。 – Thomas 2009-02-27 02:26:10

+0

更新描述 – 2009-02-27 02:31:42

4

HTTP spec

4。的「同一性」的內容編碼總是可以接受的,除非 特別拒絕,因爲接受編碼字段包括 「同一性; Q = 0」,或者是因爲該字段包括「*; q = 0的」和不 未明確包括「身份」內容編碼。如果 Accept-Encoding字段值爲空,則只有「標識」 編碼是可接受的。

所以,如果你設置Accept-Encoding: identity;q=0, gzip, deflate你強制服務器壓縮它,或返回406(不可接受)。

相關問題