Closed xccjk closed 2 years ago
HTTP协议(超文本传输协议)是浏览器端与服务端之间最主要的通信协议
1991年出现,作用是用来传输超文本内容HTML
传输方式
为客户端发起请求,服务端响应请求的通信方式: 客户端 -> GET/index.html -> 服务端 -> <html>...</html> -> 客户端
HTTP/0.9的不足
只能用来传输文本内容,随着新技术的发展,浏览器希望通过HTTP来传输基本,样式,图片,音视频等其他类型文件
核心改变
1996年出现 1. 新增头部设定,头部内容以键值对的形式设置 2. 请求头部通过Accept字段来告诉服务端可以接收的请求的文件类型 3. 响应头部通过Content-Type字段来告诉浏览器返回的文件类型 4. 很多其他功能也可以依靠头部字段实现,比如缓存,认证
客户端 -> GET/index.html HTTP/1.0 accept:text/css -> 服务端 -> HTTP/1.0 200 OK Content-type: text/css... -> 客户端
不足
在HTTP/1.0中,每进行一次通信,都需要建立连接、数据传输、断开连接三个阶段,在连接过多时,不停的建立连接和断开连接会增大网络开销
1999年出现,解决了连接问题,及重复的创建和断开网络连接,增加了一个创建持久连接的方法,主要实现为一个连接传输完成时,并不是马上进行关闭,而是继续复用它传输其他的请求数据,这个连接保持到浏览器或者服务器端断开连接为止
客户端 -> GET/index.html HTTP/1.0 accept:text/css -> 服务端 -> HTTP/1.0 200 OK Content-type: text/css... -> 客户端 -> 下一次请求 GET/index.html HTTP/1.0 accept:text/css -> 服务端 -> HTTP/1.0 200 OK Content-type: text/css... -> ... ->客户端
背景
因为HTTP是基于TCP实现的,TCP建立连接以及断开的过程,也就是常常说的'三次握手'和'四次挥手'
为什么需要进行三次握手?
客户端和服务端断开连接时要发送四次数据,这个过程称为四次挥手
为什么建立连接只通信了三次,而断开连接却用了四次?
HTTP/1.1的不足
虽然通过长连接减少了大量创建/断开连接造成的性能损耗,但是它的并发能力受到限制,所以传输性能还有很大的提升空间
并发能力受限原因
浏览器为了减缓服务器的压力
HTTP/1.1本身的问题
HTTP/2解决问题的方式?
多路复用
二进制帧
HTTP1.1与HTTP2存在的问题?
HTTP/3的解决方式?
HTTP协议的那些事
什么是HTTP协议?
HTTP/0.9版本
HTTP/1.0
HTTP/1.1
TCP协议
三次握手
四次挥手
客户端和服务端断开连接时要发送四次数据,这个过程称为四次挥手
HTTP/2
浏览器为了减缓服务器的压力
,浏览器限制了同一个域名下HTTP连接数为6-8个,所以在HTTP/1.1下很容易看到资源文件等待加载的情况,对应的优化方式就是使用多个域名来加载资源HTTP/1.1本身的问题
,虽然HTTP/1.1使用了持久连接,但是多个请求公用一个TCP连接,一个连接中同一时刻只能处理一个请求,在当前的请求没有结束之前,其他的请求只能处于阻塞状态,这种情况称为'队头阻塞'多路复用
二进制帧
HTTPS原理
对称加密
非对称加密
证书机制
HTTP/3
总结