瀏覽器在 Windows 7 64 位元作業系統中無法取得壓縮頁面

瀏覽器在 Windows 7 64 位元作業系統中無法取得壓縮頁面

我的 Windows 7 64 位元電腦在工作時遇到了一個奇怪的問題。我管理一些提供 gzip 壓縮內容(js、css、html)的 Linux Web 伺服器。奇怪的行為是,當我係統中的所有瀏覽器(Firefox、Chrome、Vivaldi)向這些 Linux 伺服器請求內容時(我可以Accept-Encoding: gzip,deflate很好地看到標頭),它們卻無法取得它。所有回應都帶有Transfer-Encoding: chunked,因此內容不會被壓縮。但是,curl使用該選項在命令列運行時--compressed,回應會附帶Content-Type: gzip標題Content-Length,並且按預期進行 gzip 壓縮。在 Windows 2008 R2 伺服器上,內容以 gzip 形式提供。

以 gzip 形式提供內容在這些 Linux Web 伺服器上可以正常運作,這是可以保證的。

涉及到 pfSense 代理,但即使我在代理設定中覆蓋它以便瀏覽器直接從 Linux 伺服器請求內容,行為也是一樣的。無論有或沒有代理,都沒有變化。

我在另一台 Windows 7 64 位元電腦上確認了 Firefox 和 Chrome 的問題。因此,我得出的結論是,作業系統在某種程度上參與了這種奇怪的瀏覽器行為。

有人可以確認嗎...?

答案1

這可能是欺騙性的:為了在一條訊息中發送經過 gzipp 處理的文件,伺服器需要提供整個文件並知道其大小,正如您自己所說,這在您的情況下顯然不會發生:

使用選項在命令列運行curl --compressed,回應帶有標題Content-Type: gzipContent-Length並且按預期進行了gzip 壓縮。

我認為在你的情況下伺服器管道輸出到 gzip,然後將結果直接透過管道傳輸到瀏覽器,而無需先將資料寫入磁碟來計算檔案大小。由於事先不知道大小,伺服器別無選擇,只能傳回包含Transfer-Encoding: chunked可用部分的流。

當資料可用時,它將以區塊的形式返回,由瀏覽器重新組裝。但是,即使以區塊形式接收,接收到的資料仍然經過 gzipp 壓縮。

相關內容