[这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天]
1. 初识HTTP(一种无状态的协议)
什么是HTTP
超文本传输协议
当在浏览器中输入地址栏后按下会出,发生了什么?
首先,浏览器处理用户输入信息,根据最终得到的url字符串请求相应的服务器。接着拿到服务器返回的数据。最终解析数据,渲染页面
响应报文
请求报文
请求接口时的方法
- GET: 用于获取数据
- POST: 将数据提交到指定的资源,通常导致在服务器上的状态变化或者副作用
- PUT: 用请求有效载荷替换目标资源的所有表示
- DELETE: 删除指定的资源
- 剩下的一些方法
安全性和幂等性 安全性(safe): 不会修改服务器数据的方法
GETHEADOPTIONS幂等性(Idempotent): 同样的请求被执行一次与被执行多次的效果是一样的,服务器的状态也是一样的,所有safe的方法都是幂等的GETHEADOPTIONSPUTDELETEHTTP响应状态码
- 500: 服务器内部发生了不可预期的错误
- 504:
GatWay Timeout网关或者代理的服务器无法在规定的时间内获取期望的响应RESTful API
一种API的设计风格
- 每一种URL代表一个资源
- 客户端与服务器之间,传递这种资源的某种表现层
- 客户端通过HTTP method,对服务器端资源进行操作,实现表现层状态转化
2.报文
常用的请求头
常用响应头
3.缓存
强缓存
如果本地有期望使用的资源,就直接使用
强缓存中的字段
Expires: 时间戳 ,资源到期时间Cache-Contrl
- 可缓存性
no-cache: 可以使用缓存,但是需要进行协商缓存验证no-store: 不使用任何缓存- 到期
- max-age: 单位是秒,存储的最大周期,相对于请求的时间
- 重新验证
- must-revalidate: 一旦资过期,在向原始服务器验证之前,不能使用。 场景:如果客户端与服务器断开连接,如果不设置该字段,在客户端本地有数据存储的前提下,是可以使用的,但是如果设置了该字段,在未向原始服务器验证之前,不能使用
协商缓存
Etag(response)/If-None-Match(request): 资源的特定版本的标识符 (字符串)Last-Modified(response) / If-Modified-Since(request): 最后修改的时间 期望使用的资源在本地存在,但是无法保证其是否是最新的资源,需要和服务器通信验证
3.cookie
Set Cokie -- response
相关属性(键值对的形式)
Name: 各种cookie的名称Expires: cookie的有效期,缺少时cookie仅在关闭浏览器之前有效Path: 限制指定cookie的发送范围的文件目录,默认为当前Domain: 限制cookie生效的域名,默认为创建cookie的服务域名secure: 仅在HTTPS安全连接时,才可以发送cookieHttpOnly: JS脚本无法获得 cookieSameSite = [None | Strict |Lax]
- None: 同站,跨站都可以发送
- Strict: 仅在同站时发送
- Lax: 允许与顶级导航一起发送,并将与第三方网站发起的GET请求一起发送
4. HTTP/2---更快、更稳定、更简单
HTTP/2的特点
- HTTP/2以 帧(frame) 作为最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流
- 在帧的传输过程中,内容用二进制编码的形式,比 HTTP/1 中使用纯文本的形式更快
- 各个帧可以交错发送,接收方重组织
- 连接是永久的,而且仅需要每个来源一个连接(这和无状态不冲突)
- 存在流控制: 阻止发送方向接收方发送大量数据的机制
- 服务器能够主动推送给接收方一些相关相关的信息
5. HTTPS的概述
- 经过TSL/SSL加密
- 对称加密: 加密和解密都是使用同一个密钥
- 非对称加密: 加密和解密需要不同的密钥 公钥 和 私钥
- 混用对称加密和非对称加密
- 具体步骤
- 浏览器发送一个https的请求。服务器端接收到请求后,会首先返回一些包含密钥的证书,浏览器检查证书是否合法
- 将公钥提取,生成随机数,通过公钥加密随机数,向服务器端传输加密后的随机数。服务器端通过私钥对随机数解密
- 服务器端通过传入随机数的对称加密,对数据进行加密之后传输给浏览器
- 浏览器通过本地存储的随机数进行对数据的解密