HTTP协议是什么
说到Http协议我们都几乎很清楚了,我们第一个大规模使用的Http协议版本是0.9。
Http又称超文本传输协议(Hypertext Transfer Protocol)。
什么是超文本呢?顾名思义,就是超越文本或不只是文本,比如图片、音频、视频等。
为什么需要协议?
在网络传输中,传输的都是0、1这样的数据流,只有按照一定的规则,对方才能识别清楚,这样约定好的规则,就可以称为协议。
协议需要明确的边界:开始、结束。需要清楚数据流是从哪一部分开始的到哪一部分结束的。
协议能够携带信息:消息内容、消息类型等
协议里有什么?
先来看一个请求,请求头都包含了哪些信息
- 首行
HTTP/2 200 OK
版本号+ 状态码 + 状态码解释
- 协议头
协议头分为:请求头和响应头
协议头是键值对结构,每个键值对各占一行,键值对用冒号分隔
如:Content-Type: application/json
- 空行
空行是协议头的结束标记
- 正文
空行后的内容都是正文,正文可以是空字符串,也可以非空。
请求行/状态行
请求行包括方法名、URL、协议版本
常见的方法名有:
- GET
- POST
- HEAD
- PUT
- DELETE
- CONNECT
- OPTIONS
- TRACE
- PATCH
状态行包括协议版本、状态码、状态码描述。
常见的状态码:
- 1xx:信息类
- 2xx:成功
- 3xx:重定向
- 4xx:客户端错误
- 5xx: 服务端错误
请求流程
一个请求需要经过哪些层呢?
一个请求需要经过:业务层、服务治理层、中间件层、协议编解码层、传输层。
不足与展望
下面来对比下Http1、Http2、QUIC都有哪些优缺点:
- Http1:队头阻塞、传输效率低、明文传输不安全
- Http2:多路复用、头部压缩、二进制协议
- QUIC:基于UDP实现、解决队头阻塞问题、加密减少握手次数、支持快速启动