如果你把一个HTTP请求到Web服务器,它返回一个类型图像/ JPEG的响应,又是怎样的二进制数据实际上编码? 难道跨线,或它的(如BASE64)一些基于字符的表示那张图像的原始字节级的内容?
Answer 1:
经编码的传输的数据由指定的Content-Encoding
HTTP响应报头(参见在HTTP 1.1规范RFC2616部14.11和3.5)。 如果存在的话,它可以是gzip
, compress
,或deflate
压缩数据(没有其它的在HTTP 1.1中定义)。 如果不是,则数据是基于所述原始编码Content-Type
HTTP响应报头(MIME类型)。 所述Content-Encoding
由所确定的Accept-Encoding
HTTP请求头值和是否web服务器支持请求的编码。
在你的情况下,如果Content-Encoding
HTTP响应头不存在,该数据是完全一样的文件内容。 否则,它是用指定的编码压缩。 例如:gzip或deflate。
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格式,并保存你所得到的,并将其与原有的,甚至保存,如版本。