4月阅读周·HTTP权威指南:实体和编码之报文是箱子,实体是货物篇
引言
HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。
《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。
这本书主要包括以下内容:
- 第一部分描述了Web的基础构件与HTTP的核心技术
- 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
- 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
- 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
- 第五部分介绍了发布和传播Web内容的技巧。
- 第六部分是一些很有用的参考附录,以及相关技术的教程。
实体和编码
每天都有数以亿计的各种媒体对象经由HTTP传送,如图像、文本、影片以及软件程序等。只要你能叫出名字,HTTP就可以传送。HTTP还会确保它的报文被正确传送、识别、提取以及适当处理。
主要包括以下内容:
- 作为HTTP数据的容器,HTTP报文实体有哪些格式和行为。
- HTTP如何描述实体的主体大小,HTTP为确定大小制定了哪些规则。
- 为了使客户端正确处理内容,使用了哪些实体首部来描述内容的格式、字母和语言。
- 可逆的内容编码,发送方可以在发送之前用它来转换内容的数据格式,使其占用更小的空间,或者更安全。
- 传输编码和分块编码。传输编码可以改变HTTP传输数据的方式,以改善某些类型内容的通信能力。分块编码是一种特殊的传输编码,它把数据切分为若干块,这样可以更可靠地传输长度未知的内容。
- 标记、标签、时间以及校验和等一整套机制,帮助客户端获取所请求内容的最新版本。
- 可用作内容版本号的验证码,网站应用可以通过它确保接收最新的内容。还有设计用来控制对象新鲜度的各种HTTP首部字段。
- 范围,在恢复中断的传输方面很有用。
- HTTP差异编码扩展,它使客户端只需要请求网页中和前一次相比有改变的部分。
- 实体主体的校验和,可以用来检测经过若干代理之后,实体的内容是否发生了改变。
报文是箱子,实体是货物
实体首部指出这是一个纯文本文档(Content-Type:text/plain),它只有18个字节长(Content-Length:18)。和往常一样,一个空白行(CRLF)把首部字段同主体的开始部分分隔开来。
HTTP实体首部描述了HTTP报文的内容。HTTP/1.1版定义了以下10个基本实体首部字段。
- Content-Type实体中所承载对象的类型。
- Content-Length所传送实体主体的长度或大小。
- Content-Language与所传送对象最相配的人类语言。
- Content-Encoding对象数据所做的任意变换(比如,压缩)。
- Content-Location一个备用位置,请求时可通过它获得对象。
- Content-Range如果这是部分实体,这个首部说明它是整体的哪个部分。
- Content-MD5实体主体内容的校验和。
- Last-Modified所传输内容在服务器上创建或最后修改的日期时间。
- Expires实体数据将要失效的日期时间。Allow该资源所允许的各种请求方法,例如,GET和HEAD。
- Allow该资源所允许的各种请求方法,例如,GET和HEAD。
- ETag这份文档特定实例的唯一验证码。ETag首部没有正式定义为实体首部,但它对许多涉及实体的操作来说,都是一个重要的首部。
- Cache-Control指出应该如何缓存该文档。和ETag首部类似,Cache-Control首部也没有正式定义为实体首部。
实体主体
实体主体中就是原始货物啦。任何其他描述性的信息都包含在首部中。因为货物(也就是实体主体)只是原始数据,所以需要实体首部来描述数据的意义。例如,Content-Type实体首部告诉我们如何去解释数据(是图像还是文本等),而Content-Encoding实体首部告诉我们数据是不是已被压缩或者重编码。我们将在随后的小节中讨论所有这些方面及更多的内容。
首部字段以一个空白的CRLF行结束,随后就是实体主体的原始内容。不管内容是什么,文本或二进制的、文档或图像、压缩的或未压缩的、英语、法语或日语,都紧随这个CRLF之后。
两个实际的HTTP报文的例子。一个携带着文本实体,另一个承载的是图像实体。十六进制的数值中展示的是报文的实际内容。
- 实体主体从第65个字节开始,紧随首部末尾的CRLF。实体主体中包含了“Hi! I'm a message! ”这句话的ASCII编码字符。
- 实体主体从第67字节开始。实体主体包含了一个GIF格式图像的二进制内容。GIF文件以6个字节的版本标志开头,后面是16位的宽度和16位的高度。可以在实体主体中直接看到这3项内容。
总结
如果把HTTP报文想象成因特网货运系统中的箱子,那么HTTP实体就是报文中实际的货物。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)