4月阅读周·HTTP权威指南:实体和编码之媒体类型和字符集篇

举报
叶一一 发表于 2025/04/22 09:45:00 2025/04/22
【摘要】 引言HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对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差异编码扩展,它使客户端只需要请求网页中和前一次相比有改变的部分。
  • 实体主体的校验和,可以用来检测经过若干代理之后,实体的内容是否发生了改变。

实体摘要

尽管HTTP通常都是在像TCP/IP这样的可靠传输协议之上实现的,但仍有很多因素会导致报文的一部分在传输过程中被修改,比如有不兼容的转码代理,或者中间代理有误,等等。为检测实体主体的数据是否被不经意(或不希望有)地修改,发送方可以在生成初始的主体时,生成一个数据的校验和,这样接收方就可以通过检查这个校验和来捕获所有意外的实体修改了。

服务器使用Content-MD5首部发送对实体主体运行MD5算法的结果。只有产生响应的原始服务器可以计算并发送Content-MD5首部。中间代理和缓存不应当修改或添加这个首部,否则就会与验证端到端完整性的这个最终目的相冲突。Content-MD5首部是在对内容做了所有需要的内容编码之后,还没有做任何传输编码之前,计算出来的。为了验证报文的完整性,客户端必须先进行传输编码的解码,然后计算所得到的未进行传输编码的实体主体的MD5。举个例子吧,如果一份文档使用gzip算法进行压缩,然后用分块编码发送,那么就对整个经gzip压缩的主体进行MD5计算。

除了检查报文的完整性之外,MD5还可以当作散列表的关键字,用来快速定位文档并消除不必要的重复内容存储。除了这些可能的用法,一般不常用到Content-MD5首部。

媒体类型和字符集

Content-Type首部字段说明了实体主体的MIME类型。[插图]MIME类型是标准化的名字,用以说明作为货物运载实体的基本媒体类型(比如:HTML文件、Microsoft Word文档或是MPEG视频等)。客户端应用程序使用MIME类型来解释和处理其内容。

文本的字符编码

Content-Type首部还支持可选的参数来进一步说明内容的类型。charset(字符集)参数就是个例子,它说明把实体中的比特转换为文本文件中的字符的方法:

Content-Type: text/html; charset=iso-8859-4

多部分媒体类型

MIME中的multipart(多部分)电子邮件报文中包含多个报文,它们合在一起作为单一的复杂报文发送。每一部分都是独立的,有各自的描述其内容的集;不同的部分之间用分界字符串连接在一起。HTTP也支持多部分主体。不过,通常只用在下列两种情形之一:提交填写好的表格,或是作为承载若干文档片段的范围响应。

多部分表格提交

当提交填写的HTTP表格时,变长的文本字段和上传的对象都作为多部分主体里面独立的部分发送,这样表格中就可以填写各种不同类型和长度的值。比如,你可能选择用昵称和小照片来填写询问你的名字和介绍信息的表格,而你的朋友可能填了她的全名并在介绍信息表内抱怨了一堆大众汽车的修理问题。

HTTP使用Content-Type:multipart/form-data或Content-Type:multipart/mixed这样的首部以及多部分主体来发送这种请求,举例如下:

Content-Type: multipart/form-data; boundary=[abcdefghijklmnopqrstuvwxyz]

多部分范围响应

HTTP对范围请求的响应也可以是多部分的。这样的响应中有Content-Type:multipart/byteranges首部和带有不同范围的多部分主体。下面是一个例子,展示了对文档不同范围的请求产生的响应:

HTTP/1.0206 Partial content
Server: Microsoft-IIS/5.0
Date: Sun, 10 Dec 2000 19:11:20 GMT
Content-Location: http://www.joes-hardware.com/gettysburg.txt
Content-Type: multipart/x-byteranges; boundary=--[abcdefghijklmnopqrstu
vwxyz]--
Last-Modified: Sat, 09 Dec 2000 00:38:47 GMT

--[abcdefghijklmnopqrstuvwxyz]--
Content-Type: text/plain
Content-Range: bytes 0-174/1441
Fourscore and seven years ago our fathers brought forth on this
continent a new nation, conceived in liberty and dedicated to the
proposition that all men are created equal.
--[abcdefghijklmnopqrstuvwxyz]--
Content-Type: text/plain
Content-Range: bytes 552-761/1441

But in a larger sense, we can not dedicate, we can not consecrate,
we can not hallow this ground. The brave men, living and dead who
struggled here have consecrated it far above our poor power to add
or detract.
--[abcdefghijklmnopqrstuvwxyz]--
Content-Type: text/plain
Content-Range: bytes 1344-1441/1441

and that government of the people, by the people, for the people shall
not perish from the earth.

--[abcdefghijklmnopqrstuvwxyz]--

总结

作为对HTTP的扩展,在IETF的草案中提出了其他一些摘要算法。这些扩展建议增加新的Want-Digest首部,它允许客户端说明期望响应中使用的摘要类型,并使用质量值来建议多种摘要算法并说明优先顺序。

Content-Type的值是标准化的MIME类型,都在互联网号码分配机构(Internet Assigned Numbers Authority,简称IANA)中注册。MIME类型由一个主媒体类型(比如:text、image或audio等)后面跟一条斜线以及一个子类型组成,子类型用于进一步描述媒体类型。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。