二进制数据还原图片_HTTP的实体数据

数据类型与编码

在TCP/IP协议栈里,传输数据基本上都是"header+body"的格式,但是TCP,UDP因为是传输层的协议,它们并不关心body数据是什么,只要把数据送到对方就可以了。

而HTTP协议则不同,它是应用层的协议,数据到达之后工作只能说是完成了一半,还必须要告诉上层应用这是什么数据才行,否则上层应用就会不知所措。

那么这里简单列举一下在HTTP里经常遇到的几个类别:

1.text:即文本格式的可读数据,我们最熟悉的应该就是text/html了,表示超文本文档,此外还有纯文本text/plain,样式表text/css等。

2.image:即图像文件,有image/gif,image/jpeg,image/png等。

3.audio/video:音频和视频数据,可能是文本也可能是二进制,必须由上层应用程序来解释。

常见的有application/json,application/javascript,application/pdf等,另外,如果实在是不知道数据是什么类型,就会是application/octet-stream,即不透明的二进制数据。

但仅有上面这些MIME type还不够,因为HTTP在传输时为了节约带宽,有时候还会压缩数据,还需要有一个"Encoding type",告诉数据是用的什么编码格式,这样对方才能正确解压缩,还原出原始数据。

通常Encoding type有下面三种类型:

1.gzip:GNU zip压缩格式,也是互联网上最流行的压缩格式

2.deflate:zlib(deflate)压缩格式,流行程度仅次于gzip

3.br:一种专门为HTTP优化的新压缩算法(Brotli)

数据类型使用的头字段

有了上面两种类型,无论是浏览器还是服务器就都可以轻松识别出body的类型,也就能正确处理数据了。

HTTP协议为此定义了两个Accept请求头子段和两个Content实体头字段,用于客户端和服务器进行内容协商。也就是说,客户端用Accept头告诉服务器希望接收什么样的数据,而服务器用Content头告诉客户端实际发送了什么样的数据。

e54c1e2b4325ad0e4a1c179759a569ea.png

Accept字段标记的是客户端可理解的MIME type,可用“,”做分隔符列出多个类型,让服务器有更多的选择余地,例如下面的这个头:

Accept: text/html,application/xml,image/webp,image/png

这就是告诉服务器:我能够看懂HTML,XML的文本,还有webp和png的图片,请给我这四类格式的数据。

相应的,服务器会在响应报文里用头子段Content-Type告诉实体数据的真实类型:

Content-Type: text/htmlContent-Type: image/png

这样浏览器看到报文里的类型是"text/html"就知道是HTML文件,会调用排版引擎渲染出页面,看到image/png就知道是一个PNG文件,就会在页面上显示出图像。

Accept-Encoding字段标记的是客户端支持的压缩格式,例如上面说的gzip,deflate等,同样也可以用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值