《http权威指南》阅读笔记(十)

在http请求过程中,可以对实体内容进行编码

通过content-encoding头部说明,一般使用 gzip,conpress,deflate,identity

默认是identity,不对实体进行编码,使用最广泛的是gzip,主要是用来对内容进行压缩,减少网络传输的数据

头部使用accept-encoding来说明客户端可以那些编码,可以使用指定多个,说明优先级,编码之间用;隔开

 

content-type,实体MIME类型 text/html 一般有主类型和子类型,这个可以在MIME中心进行注册

content-length 这个比较重要,实体的长度,主要是在http1.1中作为数据发送完成的标示

在http1.0中,如果没有持久化连接,那么服务器端关闭socket连接就说明内容发送完成

在http1.1中,默认是持久化连接,客户端和服务器端根据content-length来表明数据发送完成,可以发送下一次请求,如果content-length和实际的length不匹配,会带来严重的问题,在http1.1中,如果socket异常关闭了,可以检测内容发送是否完整

考虑到一种情况,由于需要完全生成好实体内容,才可以计算出来content-length头部,对于动态内容,很难进行计算,一般都是解析一部分,发送一部分。这样的话,就必须约定一个实体内容结束标记,取代content-length标签

可以用transfer-encoding,用在服务器响应报文里面,目前只有分块chunked 编码

chunked编码基本规则:

报文长度

报文内容

CRLF

报文长度

报文内容

CRLF

0

客户端检测字节的长度,说明报文发送完成,客户端可以发起下一次请求

 

multipart/form-data 类型的报文,这个是类似邮件传送的报文一样,可以传送多个部分,通过boundray标记多个部分

 

客户端可以进行范围请求

通过头部Range:4000-10000

说明请求服务器的实体内容从4000字节开始,到第10000字节结束,应该是左闭右开

这个在P2P网络用的比较多,想一些多线程下载软件就是这么干的,第一次通过head请求,服务器响应内容长度

客户端开启N个线程,用content-length/N进行拆分,进行部分请求,然后在把下载的内容进行组合,终于知道这个原理了

 

还有增量请求,通过条件请求来进行

条件请求头部:

If-Modified-Since,If-Unmodified-Since,If-Match,If-Not-Match

一般情况下,使用If-Not-Match和Etag请求,增量请求有一般几种算法。

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示