《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请求,增量请求有一般几种算法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架