Http协议中实体数据详细解析

1.数据类型与压缩

http协议是应用层协议,必须告诉上层传输的数据是什么类型,传输的数据用的是什么压缩方式,传输的语言类型以及语言使用的编码。

首先来看传输的数据类型以及使用的编码,http数据类型取自MIME"多用途互联网邮件扩展",MIME把数据分成8大类,这里简单列举一下http经常遇到的几个类别。

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

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

3.audio/video:音频和视频数据,例如 audio/mpeg、video/mp4 等。

4.application:数据格式不固定,可能是文本也可能是二进制,必须由上层应用程序来解释。常见的有 application/json,application/javascript、application/pdf 等,另外,如果实在是不知道数据是什么类型,像刚才说的“黑盒”,就会是 application/octet-stream,即不透明的二进制数据。

上面的是传输的数据类型,下面我们来看一下数据压缩,Encoding type(数据编码类型)就少了很多,常用的只有下面三种:

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

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

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

2.可以使用的头字段

头字段用Accept和Content表示,客户端用 Accept 头告诉服务器希望接收什么样的数据,而服务器用 Content 头告诉客户端实际发送了什么样的数据。

头字段用来声明, 如下图所示 ,我是客户端,我能接受text ,image , audio/video , application  数据类型   可以接受压缩方式有gzip,deflate,br 

我是服务端,我给你text/html类型文件,文件压缩为gzip

提醒:在大多数编程语言里“;”的断句语气要强于“,”,而在 HTTP 的内容协商里却恰好反了过来,“;”的意义是小于“,”的。

3.语言类型及语言编码方式

举几个例子:en 表示任意的英语,en-US 表示美式英语,en-GB 表示英式英语,而 zh-CN 就表示我们最常使用的汉语。

字符编码方式来处理文字,比如英语世界用的 ASCII、汉语世界用的 GBK、BIG5,日语世界用的 Shift_JIS 等。同样的一段文字,用一种编码显示正常,换另一种编码后可能就会变得一团糟。

所以后来就出现了 Unicode 和 UTF-8,把世界上所有的语言都容纳在一种编码方案里,遵循 UTF-8 字符编码方式的 Unicode 字符集也成为了互联网上的标准字符集。

我们来看下上图,Accept-Language:zh-CN,zh,en表示客户端最想要简体中文(zh-CN),其次是中文(zh),然后是英语(en);Accept-Charset:gbk,utf-8可以接受的字符集为gbk和utf-8

Content-Language表示服务端给的是简体中文,Content-Type:text/html;charset=utf-8表示服务端给的是text/html类型的文件,用的是utf-8的编码方式。

4.用“q”参数表示权重来设定优先级

权重的最大值是 1,最小值是 0.01,默认值是 1,如果值是 0 就表示拒绝。具体的形式是在数据类型或语言代码后面加一个“;”

这里再次提醒的是“;”的用法,在大多数编程语言里“;”的断句语气要强于“,”,而在 HTTP 的内容协商里却恰好反了过来,“;”的意义是小于“,”的。

Accept: text/html,application/xml;q=0.9,*/*;q=0.8

上面表示,application/xml权重为0.9,任意数据权重为0.8

服务器收到请求头后,就会计算权重,再根据自己的实际情况优先输出 HTML 或者 XML。

5. Vary 字段

Vary字段会告诉你服务器依据客户端给的哪几个头字段反馈

Vary: Accept-Encoding,User-Agent,Acce

这个 Vary 字段表示服务器依据了 Accept-Encoding、User-Agent 和 Accept 这三个头字段,然后决定了发回的响应报文。

如果想要学习更详细的HTTP相关知识,大家可以到极客时间

发布了70 篇原创文章 · 获赞 25 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/a66666_/article/details/104066741
今日推荐