HTTP协议总结
目录
协议背景
层次结构讲,http协议是面向服务的应用层协议,建立在TCP可靠链接协议基础上的。
发展历程
1.0 到1.1
1.0的协议是面向服务的,因此每次连接看做单次服务。同时,协议本身是无连接的,且协议是无状态的。
问题:同一个页面的大量http请求的进行,是非常消耗资源的,主要是占用文档的传输时间。
1.每一次请求都要占用2倍RTT开销+文档传输时间。而一个页面的文档上多个链接的对象需要依次进行链接,时间开销大。
2.客户和服务器连接时,服务器对于每个客户的TCP请求的都会分配内存和变量,服务器开销大
解决一、 浏览器能同时进行5-10个TCP链接,加快时间开销。
http1.1 使用持续时间
持续时间的工作方式
1、流水线式
2、非流水线
1.1到2.0 http2.0
总结:
●对1.x协议语意的完全兼容
2.0协议是在1.x基础上的升级而不是重写,1.x协议的方法,状态及api在2.0协议里是一样的。
●性能的大幅提升
2.0协议重点是对终端用户的感知延迟、网络及服务器资源的使用等性能的优化
具体优化点
01 二进制分帧(Binary Format)- http2.0的基石
http 1.X 采用aicⅡ码 ,采用二进制进行分帧,显而易见的高效的多
02 多路复用 (Multiplexing) / 连接共享
1.X版本中,并行的方式有多个TCP链接请求 和 流水线工作方式两种。
而2 版本中,采用了流的机制。可以在收到流后,通过序列号等方式。大大提高并行效率
03 头部压缩(Header Compression)
头部信息的压缩
原理:
用header字段表里的索引代替实际的header。
http/2的HPACK算法使用一份索引表来定义常用的http Header,把常用的 http Header 存放在表里,请求的时候便只需要发送在表里的索引位置即可。
例如 :method=GET 使用索引值 2 表示,:path=/index.html 使用索引值 5 表示
04 请求优先级(Request Priorities)
把http消息分为很多独立帧之后,就可以通过优化这些帧的交错和传输顺序进一步优化性能。每个流都可以带有一个31比特的优先值
●优先级最高:主要的html
●优先级高:CSS文件
●优先级中:js文件
●优先级低:图片
05 服务器推送
服务器可以对一个客户端请求发送多个响应,服务器向客户端推送资源无需客户端明确地请求。并且,服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。
正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度
协议头部内容
请求报文头部的方法
post , option, get , head , put , delete
post 向服务器添加信息
option 请求一些选项信息
get 请求服务器读取url 中的信息
head 请求读取url 信息中的首部
post 和 get 的区别
安全性区别
传输数据的大小区别
(url长度限制)
请求报文与回复报文
请求报文,methods + url + 版本
首部行
回复报文
版本 + 状态码 + 短语(结束状态码)
状态码分类
1 开头通知消息
2 开头 成功
3 开头 重定向 (完成请求需要进一步操作)
4 开头 客户 错误
5 开头 服务器差错