> http 状态码和http methods,仅仅使一个约束规范。可以更改(不建议)
### http 状态码
* 状态码分类
* 1xx:服务器收到请求
* 2xx:请求成功,如 200
* 3xx:重定向,如 302
* 4xx:客户端错误,如 404
* 5xx:服务端错误,如 500
* 常用状态码
* 200 成功
* 301 永久重定向 配合 location,浏览器自动处理。如换域名,浏览器会存缓存。
* 302 临时重定向 配合 location,浏览器自动处理。如搜索引擎的跳转链接、短网址的跳转。
* 304 资源未被修改,两次请求的内容是相同的
* 404 资源未找到
* 404 没有权限
* 500 服务器错误
* 504 网关超时
### http methods
* 传统 methods
* get 获取服务器的数据
* post 向服务器提交数据
* 现在的 methods
* get 获取数据
* post 新建数据
* patch/put 更新数据
* delete 删除数据
### Restful API
* 一种新的 API 设计方法(早已推广使用)
* 传统 API 设计:把每个 url 当做一个功能
* Restful API 设计:把每个 url 当做一个唯一的资源
#### 如何设计成一个资源?
* 尽量不用 url 参数
* 传统 API 设计:`/api/list?pageIndex=2`
* Restful API 设计:`/api/list/2`
* 用 method 表示操作类型
* 传统 API 设计,如
* post 请求 `/api/create-blog` 创建博客
* post 请求 `/api/update-blog?id=100` 更改博客内容
* get 请求 `/api/get-blog?id=100` 获取博客内容
* Restful API
* post 请求 `/api/blog` 新建博客
* patch 请求 `/api/blog/100` 更新博客
* get 请求 `/api/blog/100` 获取博客内容
### http headers
* 常见的 Request Headers:请求头
* ![image-20210307142126063](https://image.mdashen.com/pic/image-20210307142126063.png)
* Accept:浏览器可接收的数据格式
* Accept-Encoding 浏览器可接收的压缩算法,如 gzip
* Accept-Languange 浏览器可接收的语言,如 zh-CH
* Connection: keep-alive 一次 TCP 连接重复使用
* User-Agent:简称UA,浏览器信息
* Content-type 发送数据的格式,如 application/json
* 常见 Response Headers:响应头
* ![image-20210307142233196](https://image.mdashen.com/pic/image-20210307142233196.png)
* Content-type 返回数据的格式,如 application/json
* Content-length 返回数据的大小,多少字节
* Content-Encoding 返回数据的压缩算法,如 gzip
* 自定义 header:如,Authentication;常用语接口鉴权
* 缓存相关的 headers
* ![image-20210307195941177](https://image.mdashen.com/pic/image-20210307195941177.png)
### http 缓存
![image-20210307210410090](https://image.mdashen.com/pic/image-20210307210410090.png)
#### http 缓存-强制缓存
![image-20210307203735748](https://image.mdashen.com/pic/image-20210307203735748.png)
![image-20210307203900106](https://image.mdashen.com/pic/image-20210307203900106.png)
##### Cache-Control
* Response Headers 中
* 控制强制缓存的逻辑
* 例如:cache-control: max-age=2592000 单位是秒
* cache-control的值
* **max-age**:缓存的最大过期时间
* **no-cache**:不用强制缓存,交给服务端处理
* no-store:不缓存,让服务端再次返回
* private:用户缓存
* public:允许中间路由、代理进行缓存
###### Expires
* 同在 Response Headers 中
* 同为控制缓存过期
* 已被 Cache-Control 代替
#### http缓存-协商缓存(对比缓存)
![image-20210307204931779](https://image.mdashen.com/pic/image-20210307204931779.png)
* 服务端缓存策略,服务端判断这个文件是否需要缓存
* 服务器判断客户端资源,是否和服务端资源一样
* 一致则返回 304 ,负责返回 200 和最新的资源
##### 资源标识
* 在 Response Headers 中,有两种
* last-Modified 资源的最后修改时间
* Etag 资源的唯一标识(一个字符串,类似人类的指纹)
* 两者会优先使用 Etag
* Last-Modified 只能精确到秒级
* 如果资源被重复生成,而内容不变,则 Etag 更精确
##### Last-Modified
![image-20210307205350512](https://image.mdashen.com/pic/image-20210307205350512.png)
##### Etag
##### ![image-20210307205627943](https://image.mdashen.com/pic/image-20210307205627943.png)
#### 刷新页面对缓存的影响
##### 三种刷新方式
* 正常操作:地址栏输入url、跳转链接、前进后退
* 手动刷新:F5、点击刷新按钮、右击菜单刷新
* 强制刷新:ctrl + F5
##### 不同刷新操作、不同缓存策略
* 正常操作:强制缓存有效,协商缓存有效
* 手动刷新:强制缓存失效,协商缓存有效
* 强制刷新:强制缓存失效,协商缓存失效