Http服务器如何在HTTP response中传送二进制图片

要想知道如何传送这些二进制,先来点二进制文件的背景知识

 

 文件魔数 magic number:

操作系统的文件,其起始的几个字节的内容是固定的。根据这几个字节的内容就可以确定文件类型,因此这几个字节的内容被称为魔数 (magic number), 对于GIF,JPG这种二进制跨系统都是支持的(linux/Windows),对于.exe .bin这类操作系统相关的就不一样了。

 

如何查看? 用UltraEdit直接以二进制方式打开这些文件。

常见魔数

JPEG (jpg),文件头:FFD8FF 

PNG (png),文件头:89504E47 

GIF (gif),文件头:47494638

ZIP Archive (zip),文件头:504B0304

 Java Class ,  文件头:CAFEBABE

 

 我们使用Fiddler截获浏览器的HTTP响应,可以看到请求的是一个PNG图片:

GET /**/bg-header.png

为了方便查看,将响应头调成16进制模式。
Http服务器如何在HTTP response中传送二进制图片
 绿色的字都是标准的HTTP响应头(response head),然后根据HTTP/1.1标准,响应头之后跟上0D0A, 0D0A

这个就是系统的换行符, 是windows标准的\r\n,响应头跟image的实际二进制数据间有一个空行,然后跟上实际的数据,可以看到蓝色里圈住的文件魔数是89504E47,正是PNG的文件头。为了验证这个二进制的有效性,用工具提供的更能save bytes,将二进制内容存储到本地:


Http服务器如何在HTTP response中传送二进制图片
 


Http服务器如何在HTTP response中传送二进制图片
 可以看到本地文件正是这样保存的,一个图片。这样,一个http的图片内容就这样存到了本地浏览器缓存,并由浏览器使用。