http 1.x
- 线性阻塞,在同一时间内,统一域名的请求有一定数量限制,超过限制数目的请求会被阻塞。
http 1.0
- 缺陷:浏览器与服务器只保持短暂的链接,浏览器的每次请求都需要和服务器建立一个TCP链接(TCP链接的新建成本很高,因为需要客户端和服务器三次握手),服务器完成请求处理后立即断开链接,服务器不跟踪每个用户也不记录过去的请求;
- 解决方案:添加头部信息--非标准的connection字段
Connection:keep-alive
http1.1
- 持久链接:引入了持久链接,即TCP链接默认不关闭,可以被多个请求复用,不用声明
Connection:keep-alive
(对于同一个请求,大多数浏览器允许同时建立6个持久链接) - 管道机制:即在同一个TCP链接里面,客户端可以同时发送多个请求。
- 分块传输码:即服务端每产生一块数据,就发送一块,采用“流模式”渠道“缓存模式”
-
新增请求方式
-
PUT
: 请求服务器储存一个资源 -
DELETE
: 请求服务器删除标识 -
OPTIONS
: 请求查询服务器的性能,或者查询与资源相关的选项和需求 -
TRACE
: 请求服务器会送收到的请求信息,主要用于测试和诊断 -
CONNECT
: 保留将来使用
-
-
缺点
- 虽然允许复用TCP链接,但是同一个TCP链接里面,所有的数据通信是按照次序进行的,服务器只有处理完一个请求,才会接着处理下一个。如果前面的处理特别慢,后面就会有许多请求排队等着。这将导致“队头阻塞”
- 避免方式:1,减少请求数;2,同时多开持久链接
HTTP/2.0
-
优点:
- 采用二进制格式而非文本格式
- 完全多路复用,而非有序并阻塞的,只需一个链接即可实现并行
- 使用报头压缩,降低成本
- 服务器推送
-
二进制协议
- http1.1的头信息是文本(ASCII编码),数据体可以是文本,也可以是二进制。但是http2则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为“帧”:头信息帧和数据帧。
- 二进制协议解析起来更高效,“线上更紧凑“,更重要的是错误更少。
- 完全多路复用:http2 复用TCP协议,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞“。
-
报头压缩:http协议是没有状态的,导致每次请求必须附上所有信息,所以,请求的很多字段都是重复的,比如cookie,一样的内容每次请求都必须附带,这会浪费很多的带宽,也很影响速度,对于同样的头部,不必再通过请求发送,只需发送一次;http/2对这点进行了优化
- 头信息使用gzip或者compress压缩后再发送;
- 另一方面,客户端和服务器同时维护一张信息表,所有字段都会孙茹这个表,产生一个索引号,之后就不发送同样的字段了,只发送索引号。
- 服务器推送:http/2允许服务器未经请求,主动向客户端发送资源;通过推送那些服务器任务客户端将会需要的内容到客户端的缓存里面,避免往返的延迟。
https
- http协议通常承载于TCP协议智商,在HTTP和TCP之间增加一个安全协议层(SSL或者TSL),这个时候就成了我们常说的HTTPS。
-
https的主要作用
- 对数据进行加密并建立一个信息安全通道,来保证传输过程中的数据安全。
- 对网站服务进行真实身份认证
-
https和http的区别
- https是加密协议,http是明文传输协议
- https需要用到SSL证书,http不用
- https比http更安全,对搜索引擎更友好,利于SEO
- https的端口443,http标准端口80
- https基于传输层,http基于应用层
-
https和http的工作过程区别
-
http 包含动作
- 浏览器打开一个TCP链接
- 浏览器发送http请求到服务器端
- 服务器发送http回应信息到浏览器
- TCP链接关闭
-
SSL包含动作
- 验证服务器端
- 客户端和服务器端选择加密算法和密码,确保双方都支持
- 验证客户端(可选)
- 使用公钥加密技术来生成共享加密数据
- 创建一个加密的SSL链接
- 基于这个SSL链接传递http请求
-
-
https加密方式
-
对称加密
- 加密和解密都是使用的同一个密钥
-
非对称加密
- 加密使用的密钥和解密使用的密钥是不同的,分为公钥和私钥
- 公钥和算法都是公开的,私钥是保密的。
-
非对称加密过程
- 服务器生成配对的公钥和私钥
- 私钥保存在服务端,公钥发送给客户端
- 客户端使用公钥加密明文传输给服务端
- 服务端使用私钥解密秘闻得到明文
-
数字签名
- 数字签名就是在信息的后面加上一段内容,可以证明信息没有被改过
- 验证传输的内容是对方发送的数据
-
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。