这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
什么是 HTTP 协议?
本节课介绍了什么是 HTTP,以及其基本特点
HTTP:Hyper Text Transfer Protocol(超文本传输协议)
基本特点:
- 应用层协议,基于 TCP 协议
- 请求响应
- 简单可拓展
- 无状态
HTTP 协议分析
并对 HTTP 协议进行分析,简述了 HTTP 报文结构、发展历程
HTTP 协议的演变
HTTP/1.0 到 HTTP/1.1
主要实现了对 TCP 连接的复用
HTTP/1.0:每一对 HTTP 请求和响应都需要打开一个单独的 TCP 连接
HTTP/1.1:引入了持久连接的概念,通过设置 Connection 头部为 keep-alive 的方式
HTTP/1.1 到 HTTP/2
主要实现了多个请求的复用
HTTP/2:
- 通过将 HTTP 消息拆分为独立的帧,进行交错发送
- 对 HTTP 头部进行了二进制编码
- 还实现了 Header 压缩、服务端主动推动、流优先级等能力
HTTP/2 到 HTTP/3
主要实现了基于 UDP 协议、更快的传输
使用了基于 UDP 的 QUIC 协议,实现了又快又可靠的传输
UDP:没有错误检查内容,更快的实现通信
QUIC 负责合并纠错、重建丢失的数据
总的来说,HTTP 协议主要围绕着传输效率和速度上的优化
状态码
代表当前请求的状态
- 1XX - 提示信息
- 2XX - 请求成功
- 3XX - 重定向
- 4XX - 客户端错误
- 5XX - 服务端错误
应用场景
然后介绍了常用的应用场景
静态资源请求
分析报文信息
缓存策略:
- 强缓存
- Cache-control:一年
资源类型:CSS
登录场景
登录状态的记录
Session + cookie Or JWT
适合使用jwt的场景:
- 有效期短
- 只希望被使用一次
比如,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接具有时效性(通常只允许几小时之内激活),不能被篡改以激活其他可能的账户,一次性的。这种场景就适合使用jwt。
而由于jwt具有一次性的特性。单点登录和会话管理非常不适合用jwt,如果在服务端部署额外的逻辑存储jwt的状态,那还不如使用session。基于session有很多成熟的框架可以开箱即用,但是用jwt还要自己实现逻辑。
实际应用
在浏览器与 node 中的实际使用
在实际应用中,标准库 HTTP/HTTPS 功能不是十分友好。我们常用请求库 axios,它不仅支持浏览器环境,而且也支持 node 环境,本身还带有丰富的拦截器,使用体验相当不错。
个人总结
通过本节课,我初步了解了什么是 HTTP 协议,以及 HTTP 协议的一些应用场景