美文网首页
HTTP的实体数据

HTTP的实体数据

作者: LegendGo | 来源:发表于2020-06-27 18:03 被阅读0次

数据类型和编码

在TCP/IP的协议中,传输数据基本上是header +body的格式,但是TCP和UDP是传输层协议,不会关系body的数据是什么,只要把数据发送到对方就算完成任务
但是HTTP协议不同,他是应用层协议,他需要告诉上层应用是什么数据。
在HTTP的协议诞生之前就已经又了针对这种问题的解决方案,方案的名字叫做“多用途互联网邮件扩展”(Multipurpose Internet Mail Extensions),简称为 MIME。
下面列举一下在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,即不透明的二进制数据。

但仅有 MIME type 还不够,因为 HTTP 在传输时为了节约带宽,有时候还会压缩数据,为了不要让浏览器继续“猜”,还需要有一个“Encoding type”,告诉数据是用的什么编码格式,这样对方才能正确解压缩,还原出原始的数据。
比起 MIME type 来说,Encoding type 就少了很多,常用的只有下面三种:

  1. gzip:GNU zip 压缩格式,也是互联网上最流行的压缩格式;
  2. deflate:zlib(deflate)压缩格式,流行程度仅次于 gzip;
  3. br:一种专门为 HTTP 优化的新压缩算法(Brotli)

数据类型使用的头字段

  • 在HTTP协议中海定义了Accept和Content两个实字段,用于客户端和服务器进行内容协商,也就是说客户端用法Accept的头信息来告诉服务器希望接受什么样子的数据,而服务器用Content的头告诉客户端实际发送了什么数据。
  • Accept字段标记的是客户端可理解的 MIME type,可以用“,”做分隔符列出多个类型,让服务器有更多的选择余地,例如下面的这个头:
Accept: text/html,application/xml,image/webp,image/png
  • Accept-Encoding字段标记的是客户端支持的压缩格式,例如上面说的 gzip、deflate 等,同样也可以用“,”列出多个,服务器可以选择其中一种来压缩数据,实际使用的压缩格式放在响应头字段Content-Encoding里
Accept-Encoding: gzip, deflate, br
Content-Encoding: gzip

语言类型和编码

  • 所谓的“语言类型”就是人类使用的自然语言,例如英语、汉语、日语等,而这些自然语言可能还有下属的地区性方言,所以在需要明确区分的时候也要使用“type-subtype”的形式,不过这里的格式与数据类型不同,分隔符不是“/”,而是“-”。
  • 所以后来就出现了 Unicode 和 UTF-8,把世界上所有的语言都容纳在一种编码方案里,UTF-8 也成为了互联网上的标准字符集。

语言类型使用的头字段

  • Accept-Language字段标记了客户端可理解的自然语言,也允许用“,”做分隔符列出多个类型,例如:
Accept-Language: zh-CN, zh, en
  • 相应的,服务器应该在响应报文里用头字段Content-Language告诉客户端实体数据使用的实际语言类型:
Content-Language: zh-CN
  • 字符集在 HTTP 里使用的请求头字段是Accept-Charset,但响应头里却没有对应的 Content-Charset,而是在Content-Type字段的数据类型后面用“charset=xxx”来表示,这点需要特别注意
Accept-Charset: gbk, utf-8
Content-Type: text/html; charset=utf-8

相关文章

  • HTTP的实体数据

    数据类型和编码 在TCP/IP的协议中,传输数据基本上是header +body的格式,但是TCP和UDP是传输层...

  • HTTP的实体数据

    数据类型与编码 列举一下在 HTTP 里经常遇到的几个类别(也即 MIME type): text:即文本格式的可...

  • Spring 消息转换

    http Accept:请求头,代表发送端(客户端)希望接受的数据类型http content-type:实体头,...

  • 【http】浏览器如何处理服务器的响应

    HTTP在传输数据时,可以直接按照原样传,也可以进行编码。 报文和实体 报文:HTTP通信中的基本单位,由8位组字...

  • 2018-09-17

    http协议 五层模型介绍 物理层:主要作用是定义物理设备如何传输数据,网线,光纤 数据链路层:在通信实体间建立数...

  • 【HTTP】content-length: 实体的长度

    报文是箱子,实体是货物 HTTP 权威指南中提到可以把HTTP报文看成是网络货运系统的箱子,HTTP实体就是货物 ...

  • HTTP请求中的Content-Type

    Content-Type代表发送的实体数据的数据类型,包括客户端发送的实体数据和服务端返回的实体数据(在respo...

  • HTTP有哪些特点?

    HTTP 是灵活可扩展的,可以任意添加头字段实现任意功能; 传输的实体数据可缓存可压缩、可分段获取数据、支持身份认...

  • curl 发送get、post请求

    GET POST 请求实体中的数据可以用下面的网址压缩+转义http://www.ab173.com/json/z...

  • HTTP/1.1的实体首部

    文章作者:Tyan博客:noahsnail.com | CSDN | 简书 HTTP实体首部描述了HTTP报文的内...

网友评论

      本文标题:HTTP的实体数据

      本文链接:https://www.haomeiwen.com/subject/gwdvfktx.html