我試圖在Spring引導web應用程序上啓用http響應壓縮。 它適用於某些用戶代理,並且出於某種原因不適用於其他用戶(以下特定情況)。Spring引導http響應壓縮對某些用戶代理不起作用
我的基本問題是: 爲什麼Spring Boot中的http響應壓縮(gzip)僅適用於某些User-Agent標頭以及它的配置位置。
Spring boot reference對此沒有任何說明。
我準備了啓用壓縮的簡單網絡應用程序:sample spring-boot-compression app 有集成測試驗證gzip編碼僅適用於某些情況。
我配置了帶彈簧的引導:
server:
tomcat:
compression: on
compressable-mime-types: text/html,text/css,application/javascript,application/json,application/font-sfnt,application/font-woff,application/font-woff2
當我嘗試做一些請求,捲曲:
$ curl -i -H "Accept-Encoding: gzip,deflate" http://localhost:8080
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Content-Encoding: gzip
Vary: Accept-Encoding
我看到Content-Encoding: gzip
頭設置。
當我設置User-Agent
來爲AppleWebKit(或其他瀏覽器如IE)不壓縮:
$ curl -i -H "Accept-Encoding: gzip,deflate" -H "User-Agent: AppleWebKit" http://localhost:8080
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Vary: Accept-Encoding
我重複我的測試與其他一些瀏覽器和User-Agent
頭部修改並收到一些奇怪的結果。
這裏工作(響應被壓縮)User-Agent
頭的一些:
- Mozilla/5.0
- Mozilla/5.0 (Windows NT 6.1; WOW64) Chrome/46.0.2490.80 Safari/537.36
- Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Firefox/34.0
- SomeUnknownBrowser
的
一些 不工作User-Agent
標題:
- AppleWebKit
- Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
- Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
- Gecko/20100101
我也嘗試過使用壓縮與GzipFilter
和它的行爲一模一樣。此外嘗試嵌入Jetty而不是Tomcat - 結果相同。
也許我只是想念一些東西。
你的答案是正確的。問題不在服務器端,而是在我的客戶端計算機上(帶有ESET防病毒軟件的Windows 7)。事實證明,這個響應(用Wireshark進行檢查)正在被gzip接收,並且在網絡接口na瀏覽器「某事」之間的某處解壓縮了它。 這是'某事'是ESET。 – ssobocik
****** ESET!當訪問本地主機地址時,MF毫無意義的「安全」! –
但是它與AppleWebKit有什麼關係?我可以(不情願)接受ESET堅持自己的觀點,但僅僅爲了AppleWebKit?!!!沒有道理。 – ianbeks