xccjk / x-blog

学习笔记
17 stars 2 forks source link

HTTP协议的那些事? #19

Closed xccjk closed 2 years ago

xccjk commented 3 years ago

HTTP协议的那些事

什么是HTTP协议?

HTTP协议(超文本传输协议)是浏览器端与服务端之间最主要的通信协议

HTTP/0.9版本

  1991年出现,作用是用来传输超文本内容HTML

传输方式

  为客户端发起请求,服务端响应请求的通信方式: 客户端 -> GET/index.html -> 服务端 -> <html>...</html> -> 客户端

HTTP/0.9的不足

  只能用来传输文本内容,随着新技术的发展,浏览器希望通过HTTP来传输基本,样式,图片,音视频等其他类型文件

HTTP/1.0

核心改变

  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中,每进行一次通信,都需要建立连接、数据传输、断开连接三个阶段,在连接过多时,不停的建立连接和断开连接会增大网络开销

HTTP/1.1

核心改变

  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... -> ... ->客户端

TCP协议

背景

  因为HTTP是基于TCP实现的,TCP建立连接以及断开的过程,也就是常常说的'三次握手'和'四次挥手'

三次握手

为什么需要进行三次握手?

四次挥手

客户端和服务端断开连接时要发送四次数据,这个过程称为四次挥手

为什么建立连接只通信了三次,而断开连接却用了四次?

HTTP/1.1的不足

  虽然通过长连接减少了大量创建/断开连接造成的性能损耗,但是它的并发能力受到限制,所以传输性能还有很大的提升空间

HTTP/2

并发能力受限原因

HTTP/2解决问题的方式?

HTTPS原理

对称加密

非对称加密

证书机制

HTTP/3

HTTP1.1与HTTP2存在的问题?

HTTP/3的解决方式?

总结

协议版本 解决的核心问题 解决方式
0.9 HTML 文件传输 确立了客户端请求、服务端响应的通信流程
1.0 不同类型文件传输 设立头部字段
1.1 创建/断开 TCP 连接开销大 建立长连接进行复用
2 并发数有限 二进制分帧
3 TCP 丢包阻塞 采用 UDP 协议