浅浅地给HTTP做一个笔记
HTTP 1.0
HTTP是一个基于TCP/IP通信协议来传递数据它也叫超文本传输协议
是为了进行数据传输的它将文字分割为:超文本、传输、协议、他们的关系如下
http协议是在OSI七层模型中应用层的协议
超文本
早期2g时代,我们在互联网上的信息交互主要都是以文本的形式来传输,后来技术发展,人们不再满足于只能在互联网上传输文字,还想传输图片视频音频什么的那么就有了后来第一代超文本传输协议(HTTP1.0)
传输
计算机间相互通信,我们存储的超文本会被编码为二进制包,然后通过光纤等传输再由另一台设备解码为超文本,两台设备都必须遵循HTTP协议才可以相互通信,客户端发送请求报文,服务器再返回响应报文
HTTP协议的特点
- 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
- 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
- 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
- 简单快速、灵活
- 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
请求头和响应体
HTTP 请求报文由3部分组成(请求行+请求头+请求体
)
常用请求方法
- GET请求:获取服务端的资源
- POST请求:客户端向服务端发送数据,如表单
- PUT请求:用来更新数据
- DELECT请求:删除服务端的数据
响应报文与请求报文一样,由三个部分组成(响应行,响应头,响应体
)
响应头
①报文协议及版本;
②状态码及状态描述;
③响应报文头,也是由多个属性组成;
④响应报文体,即我们真正要的“干货”。
响应码
- 200(是正常的)
- 300(重定向)
- 400(找不到资源)
- 500(服务器错误)
深度解析响应头
HTTP/1.1 200 OK ---响应码
Server: ngx_openresty/1.4.3.9 --服务器类型
Date: Sun, 03 Jul 2022 22:49:16 GMT --当前响应的时间
Content-Type: text/html; charset=utf-8 --内容类型
Content-Length: 28633 --内容长度单位字节
Connection: keep-alive --请求完之后, 是否继续保持连接
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN
Last-Modified: Sat, 02 Jul 2022 14:38:31 GMT
Accept-Ranges: bytes --接受范围 字节
Vary: User-Agent,Accept-Encoding
Cache-Control: private, max-age=600
Expires: Sat, 02 Jul 2022 23:03:34 GMT --到期时间
ETag: "6fd9-5e2d374f64a20-gzip" ==和cookie相关的头
Content-Language: zh-CN --语言种类
HTTP1.1新增了哪些功能
- 长连接:新增Connection字段,可以设置keep-alive值保持连接不断开
- 管道化:基于上面长连接的基础,管道化可以不等第一个请求响应继续发送后面的请求,但响应的顺序还是按照请求的顺序返回
- 缓存处理:新增字段cache-control
- 节约带宽
- HOST域
- 分块传输编码
HTTP2.0
因为HTTP1.x有缺点,于是就有了HTTP2.0
- HTTP/1.0一次只允许在一个TCP连接上发起一个请求,HTTP/1.1使用的流水线技术也只能部分处理请求并发,仍然会存在队列头阻塞问题,因此客户端在需要发起多次请求时,通常会采用建立多连接来减少延迟。
- 单向请求,只能由客户端发起。
- 请求报文与响应报文首部信息冗余量大。
- 数据未压缩,导致数据的传输量大
HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语义兼容的基础上,进一步减少了网络的延迟。实现低延迟高吞吐量。对于前端开发者而言,减少了优化工作简单来说他比HTTP1.x更快
HTTP3.0
因为HTTP协议是基于TCP/IP协议的,可是TCPIP协议有安全缺陷,于是HTTP3.0弃用了TCP改用UDP协议,3.0有两个主要特征
- 线头阻塞(HOL)问题的解决更为彻底:
基于TCP的HTTP/2,尽管从逻辑上来说,不同的流之间相互独立,不会相互影响,但在实际传输方面,数据还是要一帧一帧的发送和接收,一旦某一个流的数据有丢包,则同样会阻塞在它之后传输的流数据传输。而基于UDP的QUIC协议则可以更为彻底地解决这样的问题,让不同的流之间真正的实现相互独立传输,互不干扰。
- 切换网络时的连接保持:
当前移动端的应用环境,用户的网络可能会经常切换,比如从办公室或家里出门,WiFi断开,网络切换为3G或4G。基于TCP的协议,由于切换网络之后,IP会改变,因而之前的连接不可能继续保持。而基于UDP的QUIC协议,则可以内建与TCP中不同的连接标识方法,从而在网络完成切换之后,恢复之前与服务器的连接。
HTTPS
由于HTTP协议是不安全的于是就有了HTTPS协议,他在HTTP的基础上用SSL或TSL进行了加密,保证了数据的安全性
HTTPS的特点
- 内容加密:采用混合加密技术,中间者无法直接查看明文内容
- 验证身份:通过证书认证客户端访问的是自己的服务器
- 保护数据完整性:防止传输的内容被中间人冒充或者篡改
进行了加密,保证了数据的安全性
HTTPS的特点
- 内容加密:采用混合加密技术,中间者无法直接查看明文内容
- 验证身份:通过证书认证客户端访问的是自己的服务器
- 保护数据完整性:防止传输的内容被中间人冒充或者篡改