[英]HTTP Transfer-Encoding "gzip, chunked" not interpreted correctly
我目前正在用 Java 實現一個 HTTP 服務器,但在傳輸編碼時遇到了一個問題。
盡管
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Encoding: gzip
Transfer-Encoding: chunked
工作正常,使用gzip
和chunked
作為傳輸編碼,僅像這樣:
Transfer-Encoding: gzip, chunked
導致瀏覽器無法正確顯示響應。
當 Chrome 嘗試將資源下載為.gz
文件時,Firefox 嘗試顯示它,結果如下:
奇怪的是,服務器生成的消息正文與使用gzip
作為Content-Encoding
時完全相同,因為 RFC7230 允許應用多個傳輸編碼,如果最后一個應用是chunked
。
例如,
Transfer-Encoding: gzip, chunked
表示負載正文已使用 gzip 編碼進行壓縮,然后在形成消息正文時使用分塊編碼進行分塊。
這是來自服務器的原始響應:
HTTP/1.1 200 OK
Date: Tue, 09 Jul 2019 17:52:41 GMT
Server: jPuzzle
Content-Type: text/plain
Transfer-Encoding: gzip, chunked
1c
òHÍÉÉW(Ï/ÊIQ ÿÿ
a
0
可以猜到,在此之后,主體被壓縮並分塊。
我將不勝感激,因為我看不出哪里違反了規范。
您應該使用content-encoding
標頭進行端到端壓縮。
Transfer-Encoding 是一個逐跳的報頭,應用於兩個節點之間的消息,而不是資源本身。 多節點連接的每個段可以使用不同的 Transfer-Encoding 值。 如果要在整個連接上壓縮數據,請改用端到端 Content-Encoding 標頭。
此外,發送Accept-Encoding: gzip
請求標頭以告訴服務器客戶端期望什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.