当Web服务器返回一个JPEG图像(MIME类型image / jpeg)这个,怎么是编码?(Whe

2019-06-28 01:38发布

如果你把一个HTTP请求到Web服务器,它返回一个类型图像/ JPEG的响应,又是怎样的二进制数据实际上编码? 难道跨线,或它的(如BASE64)一些基于字符的表示那张图像的原始字节级的内容?

Answer 1:

经编码的传输的数据由指定的Content-Encoding HTTP响应报头(参见在HTTP 1.1规范RFC2616部14.11和3.5)。 如果存在的话,它可以是gzipcompress ,或deflate压缩数据(没有其它的在HTTP 1.1中定义)。 如果不是,则数据是基于所述原始编码Content-Type HTTP响应报头(MIME类型)。 所述Content-Encoding由所确定的Accept-Encoding HTTP请求头值和是否web服务器支持请求的编码。

在你的情况下,如果Content-Encoding HTTP响应头不存在,该数据是完全一样的文件内容。 否则,它是用指定的编码压缩。 例如:gzipdeflate。



Answer 2:

原始字节在线路发送。

(有一些设置,你可以使用Wireshark,tcp_dump等人证实了这一点。)

请注意,大多数服务器配置压缩的JPEG文件,但该文本数据通常发送的是压缩。



Answer 3:

奇怪的是,它不是“直通”。

除了加入MIME头,Web服务器似乎去掉所有的JPEG标记(0xFF时,0xNN),但留下其余不变。 这似乎很奇怪,因为我不知道网络浏览器是如何识别,然后将图像帧的开始。

我发现了这一点,通过在嵌入式系统中写我自己的简单Web服务器 - 我想我只需要添加MIME头,并发送JFIF-JPEG文件不变的休息,但浏览器说“图像无法显示,因为它包含错误“!

这里是十六进制原始的JPEG / JFIF的开始

FF FF D8 E0 00 10 4A 46 49 46 00

[SOI] [APP0] [长度] JFIF NULL

按照规范。

接收到的文件中包含这个,头后:

0D 0A 0D 0A 00 10 4A 46 49 46 00

前4个字节是CR / LF / CR /在报头的末尾LF,然后NO标记,但它确实包含的数据字段。 同样的事情重复例如帧开始时的其他标志物。

奇怪吧? 我不认为这是一个MIME编码问题,因为数据的其余部分看起来完好无损 - 包括数据等的FF

任何人都知道是怎么回事吗? PS看近,使用腻子或类似的网站只是要求.jpg格式,并保存你所得到的,并将其与原有的,甚至保存,如版本。



文章来源: When a web server returns a JPEG image (mime type image/jpeg), how is that encoded?