Iis
IIS6 在請求中包含 Via 標頭時不進行 gzip 壓縮
我有一些通過 CDN 的靜態內容。我正在使用 IIS6 的內置壓縮(gzip 和 deflate)來處理靜態內容,當我請求它時它工作正常。但是,當 CDN 對內容進行初始請求時,它不會被壓縮返回。因此,他們沒有壓縮內容來轉發給請求它的人。(是的,這引發了人們請求的問題
$$ the zipped $$來自 CDN 的內容使用無法處理壓縮的瀏覽器。不過,我們現在將其放在一邊。) 這是一個不帶“Via”標頭的請求範例:
HEAD /flash/swfobject.js HTTP/1.1 User-Agent: curl/7.19.7 (i386-pc-win32) Host: localhost:9120 Accept: */* Connection: Keep-Alive accept-encoding: gzip
它返回一個壓縮響應:
HTTP/1.1 200 OK Content-Length: 4357 Content-Type: application/x-javascript Content-Encoding: gzip Expires: Wed, 01 Jan 2020 00:00:00 GMT Last-Modified: Wed, 18 Nov 2009 15:36:52 GMT Accept-Ranges: bytes Vary: Accept-Encoding Server: Microsoft-IIS/6.0 Date: Thu, 19 Nov 2009 10:27:50 GMT
但是,如果我在請求中包含“Via”標頭(如 CDN 所做的那樣),則結果會以未壓縮的形式返回:
要求:
HEAD /flash/swfobject.js HTTP/1.1 User-Agent: curl/7.19.7 (i386-pc-win32) Host: localhost:9120 Accept: */* Connection: Keep-Alive Via: 1.1 204.160.105.17:80 (Footprint 4.5/FPMCP) accept-encoding: gzip
回复:
HTTP/1.1 200 OK Content-Length: 14602 Content-Type: application/x-javascript Expires: Wed, 01 Jan 2020 00:00:00 GMT Last-Modified: Wed, 18 Nov 2009 15:36:54 GMT Accept-Ranges: bytes Server: Microsoft-IIS/6.0 Date: Thu, 19 Nov 2009 10:29:52 GMT
是的,這些展示在請求中使用“localhost”。不過,我使用來自各種網路上的各種機器的實際域名得到了相同的結果。
那麼兩個問題:
- 這可能是 IIS 由於額外的標頭而沒有應用壓縮嗎?如果是這樣,我該怎麼辦?
- 如何判斷代理是否在返回內容之前對其進行解壓縮?
獎金問題:
- 我能做些什麼來進一步調查這個問題?
我知道SO question 332049,但是響應中有標題,而不是請求。
聚會有點晚了,但我在研究類似問題時遇到了這個問題,所以我想我會參與其中。
IIS6 不對通過上游代理到達伺服器的請求應用 HTTP 壓縮。由於 HTTP 1.1 規範指定代理伺服器必須添加“Via:”標頭,因此 IIS 必須使用它來區分直接流量和代理流量。
如果需要,可以啟用它,但我建議先對其進行測試。這種預設行為的聲稱原因是因為大多數代理不能很好地處理壓縮內容。
參考: