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差异编码扩展,它使客户端只需要请求网页中和前一次相比有改变的部分。
- 实体主体的校验和,可以用来检测经过若干代理之后,实体的内容是否发生了改变。
范围请求
关于客户端如何要求服务器只在资源的客户端副本不再有效的情况下才发送其副本,我们已经清楚地理解了。HTTP还进一步锦上添花:它允许客户端实际上只请求文档的一部分,或者说某个范围。
假设你正通过慢速的调制解调器连接下载最新的热门软件,已经下了四分之三,忽然因为一个网络故障,连接中断了。你已经为等待下载完成耽误了很久,而现在被迫要全部重头再来,祈祷着别再发生这样的倒霉事了。
例如:
GET /bigfile.html HTTP/1.1
Host: xxx.com
Range: bytes=4000-
User-Agent: Mozilla/4.61 [en] (WinNT; I)
...
在本例中,客户端请求的是文档开头4000字节之后的部分(不必给出结尾字节数,因为请求方可能不知道文档的大小)。在客户端收到了开头的4000字节之后就失败的情况下,可以使用这种形式的范围请求。还可以用Range首部来请求多个范围(这些范围可以按任意顺序给出,也可以相互重叠)。例如,假设客户端同时连接到多个服务器,为了加速下载文档而从不同的服务器下载同一个文档的不同部分。对于客户端在一个请求内请求多个不同范围的情况,返回的响应也是单个实体,它有一个多部分主体及Content-Type: multipart/byteranges首部。
并不是所有服务器都接受范围请求,但很多服务器可以。服务器可以通过在响应中包含Accept-Ranges首部的形式向客户端说明可以接受的范围请求。这个首部的值是计算范围的单位,通常是以字节计算的。例如:
HTTP/1.1200 OK
Date: Fri, 05 Nov 1999 22:35:15 GMT
Server: Apache/1.2.4
Accept-Ranges: bytes
...
Range首部在流行的点对点(Peer-to-Peer, P2P)文件共享客户端软件中得到广泛应用,它们从不同的对等实体同时下载多媒体文件的不同部分。
注意,范围请求也属于一类实例操控,因为它们是在客户端和服务器之间针对特定的对象实例来交换信息的。也就是说,客户端的范围请求仅当客户端和服务器拥有文档的同一个版本时才有意义。
总结
有了范围请求,HTTP客户端可以通过请求曾获取失败的实体的一个范围(或者说一部分),来恢复下载该实体。当然这有一个前提,那就是从客户端上一次请求该实体到这次发出范围请求的时段内,该对象没有改变过。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞 | 收藏⭐️ | 留言。
- 随机文章
- 热门文章
- 热评文章
- 全面了解男性性能力:自我评估与提升指南男性性功能测试怎么做
- 探索心理疾病的奥秘:理解、预防与治疗心理疾病测试自测免费
- 揭秘心理年龄:如何测量并理解你的心理成熟度?测心理年龄的心理测试
- 全球关注的环境问题:气候变化与可持续发展在全世界被广泛使用用英语说
- 机器学习如何让运维成本更“抠门”?——数据驱动的降本增效指南
- Java 数据库迁移系统
- GPT-4.1 API 抢先开放Cursor 已支持调用,开发者速来体验!
- 性格测试你的性格像《隐秘的角落》中的谁
- 准到吓人的心理测试题