【发布时间】:2019-07-09 18:05:26
【问题描述】:
我目前正在用 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,因为如果应用的最后一个是chunked,RFC7230 允许应用多个传输编码.
例如,
Transfer-Encoding: gzip, chunked表示payload body已经被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
正如你所猜想的那样,在此之后主体被压缩并分块。
我将不胜感激任何帮助,因为我看不到哪里违反了规范。
【问题讨论】:
-
标头可能正确,但传输的数据可能不是 gzip 格式。