HTTP实体和编码——《HTTP权威指南》系列

WilsonLiu's blog 首发地址html

实体和编码

天天都有数以亿计的各类媒体对象经由HTTP传送,如图像,文本,影片以及软件程序等。HTTP会确保它的报文被正确的传送,识别,提早以及适当的处理,则须要知足如下条件。算法

  1. 能够被正确的识别(经过Content-Type首部说明媒体格式,Content-Language首部说明语言),以便浏览器和其余客户端可以正确的处理内容浏览器

  2. 能够被正确的解包(经过Content-Length首部和Content-Encoding首部)缓存

  3. 是最新的(经过实体验证码和缓存过时控制)服务器

  4. 符合用户的须要(基于Accept系列的内容协商首部)网络

  5. 在网络上能够快速有效地传输(经过范围请求,差别编码以及其余数据压缩方法)性能

  6. 完整到达,未被篡改过(经过传输编码首部和Content-MD5校验和首部)优化

为了实现上述目标,HTTP/1.1版本定义了如下10个基本实体首部字段。ui

  • Content-Type编码

  • Content-Length

  • Content-Language

  • Content-Encoding

  • Content-Location

  • Content-Range

  • Content-MD5

  • Last-Modified

  • Expires

  • Allow

  • Etag

  • Cache-Control

Content-Length:实体的大小

Content-Length首部指示出报文中编码后实体主体的字节大小。使用Content-Length首部是为了可以检测出服务器崩溃而致使的报文截尾,并对共享持久链接的多个报文进行正确的分段。

Content-Length首部对于持久链接是必不可少的,若是响应经过持久链接传输,就可能有另外一条HTTP响应紧随其后。客户端经过Content-Length首部就能够知道报文在何处结束,下一条报文从何处开始。由于链接是持久的,客户端没法依赖链接关闭来判别报文的结束。

在使用分块编码(chunked encoding)时,能够没有Content-Length,此时,数据是分为一系列的块来发送的,每块都有大小说明。

HTTP/1.1规范中建议对于带有主体但没有Content-Length首部的请求,服务器若是没法肯定报文的长度,就应当发送400 Bad Request响应或411 Length Required响应,后一种代表服务器要求收到正确的Content-Length首部。

实体摘要

为检测实体主体的数据是否被修改过,发送方能够在生成初始的主体时,生成一个数据的校验和。Content-MD5首部是在对内容做了全部须要的内容编码以后,还没作任何传输编码以前,计算出来的。

媒体类型和字符集

Content-Type首部字段说明了实体主体的MIME类型,同时还支持可选的参数来进一步说明内容的类型。
Content-Type: text/html; charset=iso-8859-4

多部分媒体类型
MIME中的multipart电子邮件报文中包含多个报文,它们合在一块儿做为单一的复杂报文发送。每一部分都是独立的,有各自的描述其内容的集,不一样的部分之间用分界字符串链接在一块儿。
HTTP也支持多部分主体。不过,一般只用在下列两种情形之一:提交填写好的表格,或是做为承载若干文档片断的范围响应。
HTTP使用Content-Type:multipart/form-data或Content-Type:multipart/mixed这样的首部以及多部分主体来发送这种请求。

内容编码 Content-Encoding

HTTP应用程序有时在发送以前须要对内容进行编码,当内容通过编码以后,编好码的数据就防止实体主体中,像往常同样发送给接收方。此时Content-Length变为编码后的长度。
同时,咱们不但愿服务器用客户端没法解码的方式来对内容进行编码,所以,客户端须要把本身可以支持的内容编码列表防止请求的Accept-Encoding首部。

传输编码和分块编码 Transfer-Encoding

使用传输编码是为了改变报文中的数据在网络上传输的方式。

分块编码
分块编码是HTTP规范惟必定义的传输编码方式。
分块编码把报文分割为若干个大小已知的块。块之间是紧挨着发送的,这样就不须要在发送以前就知道整个报文的大小了。

范围请求 Range

范围请求是指客户端实际上只请求文档的一部分,或者说某个范围。好比,下载电影下到一半网络故障,链接中断了,此时可利用范围请求来继续下载。
Range: bytes=4000-
表明客户端请求的是文档开头4000字节之后的步伐内容。

Range首部在流行的点对点(Peer-to-Peer)文件共享客户端软件中获得普遍的应用,他们从不一样的对等实体同时下载多媒体文件的不一样部分。

差别编码

差别编码是HTTP协议的一个扩展,它经过交换对象改变的部分而不是完整的对象来优化传输性能。

请求报文

A-IM: diffe   //Accept-Instance-Manipulation
If-None-Match: ababdisdksada //验证是否新鲜

响应报文

IM:diffe //差别编码的算法
Etag: zdsdsfsafsd  //更新后的版本号
Delta-base: ababdisdksada //差别算法基于的Etag
相关文章
相关标签/搜索