这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
初识 HTTP 协议
HTTP 协议的基本定义
- 使用浏览器的过程
- 网络请求
- HTTP(Hyper Text Transfer Protocol)(超文本传输协议)
HTTP 协议主要特征
-
应用层协议、基于TCP协议
-
分为请求和相应
-
简单可扩展
-
无状态
- 每个请求都是孤立的,不知道前一个信息
HTTP 协议发展历程
-
历史
-
HTTP2
-
HTTPS
HTTP 协议的报文结构
-
安全性(safe)
- 不会修改服务器的数据的方法
- GET HEAD OPTIONS
-
幂等(idempotent)
- 同样的请求执行一次和多次获得结果一致,服务器的状态一致,所有安全的方法都是幂等的
- GET HEAD OPTIONS PUT DELETE
-
状态码
- 1xx
- 指示信息,表示请求已接收,继续处理
- 2xx
- 成功,表示请求已被成功接收、理解、接受
- 200 OK - 客服端请求成功
- 3xx
- 重定向,要完成请求必须进行更进一步的操作
- 301 - 资源(网页等)被永久转移到其他URL
- 302 - 临时跳转
- 4xx
- 客服端错误,请求有语法错误无法实现
- 401 Unautorized - 请求未经授权
- 404 - 请求资源不存在,可能是输入了错误的URL
- 5xx
- 服务器错误,服务器未能实现合法的请求
- 500 - 服务器内部发生了不可预期的错误
- 504 Gateway Timeout - 网关或者代理的服务器无法在规定的时间内获得想要的响应
- 1xx
-
RESTful API
- 一种API设计风格;Representational State Transfer
- 意义
- 每个URL代表一种资源
- 客服端和服务器之间,传递这种资源的某种表现层
- 客服端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”
- 例
-
常用请求头
-
缓存
- 强缓存
- 本地有直接用
- 请求头
- Expires 时间戳
- Cache-Control
- 可缓存性
- no-cache:协商缓存验证
- no-store:不使用任何缓存
- 到期
- max-age:单位是秒,存储的最大周期,相对于请求的时间
- 重新验证/重新加载
- must-revalidate:一旦资源过期,在成功向原始服务器验证之前,不能使用
- 可缓存性
- 协商缓存
- 本地有要协商是否能用
- Etag/If-None-Match:资源的特定版本的标识符,类似于指纹
- Last-Modified/If-Modified-Sine:最后修改时间
- 本地有要协商是否能用
- 过程
- 强缓存
-
cookie
- Set - Cookie - response
- Set - Cookie - response
场景分析
静态资源
- 方案
- 缓存 + CDN + 文件名hash
- CDN(Content Delivery Network)
- 通过用户就近性和服务器负载的判断CDN确保内容以一种极为高效的方式为用户的请求提供服务
- 通过用户就近性和服务器负载的判断CDN确保内容以一种极为高效的方式为用户的请求提供服务
- 文件名hash
- 通过文件名改变做到网站更新
登录
- origin组成
- scheme
- https
- host name
- port(可省)
- 443
- 80
- scheme
- 跨域(cross-origin)
- 处理
- CORS
- 预请求(复杂请求)
- 获知服务器是否允许该跨源请求
- 相关协议头
- 预请求(复杂请求)
- 代理服务器
- 同源策略是浏览器的安全策略,不是HTTP的
- Iframe
- CORS
- 处理
- 鉴权
- 记住登录
- Session + cookie
- JWT(JSON web token)
- 记住登录
- SSO:单点登录(Single Sign Only)
HTTP 协议实战
浏览器
- XHR
-
Fetch
Node篇
- 标准库 HTTP/HTTPS
- 常用请求库 axios
网络优化手段
- 速度
- 稳定性
HTTP 协议拓展 - 通信方式
- WebSocket
- QUIC(Quick UDP Internet Connection)