簡體   English   中英

HTTP 傳輸編碼“gzip,分塊”未正確解釋

[英]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

工作正常,使用gzipchunked作為傳輸編碼,僅像這樣:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM