一、http 状态码
1. 状态码分类
- 1xx 服务器收到请求。
- 2xx 请求成功,如 200。
- 3xx 重定向,如 302。
- 4xx 客户端错误,如 404。
- 5xx 服务器错误,如 500。
2. 常见状态码
- 200 成功。
- 301 永久重定向(配合 location,浏览器自动处理)。
- 302 临时重定向(配合 location,浏览器自动处理)。
- 304 资源未被修改。
- 404 资源未找到。
- 403 没有权限。
- 500 服务器错误。
- 504 网关超时。
二、http methods
1. 传统 methods
- get 获取服务器的数据。
- post 向服务器提交数据。
2. 现在 methods
- get 获取数据
- post 新建数据
- patch/put 更新数据
- delete 删除数据
3. Restful API
- 传统 API 设计:把每个 url 当作一个功能。
- Restful API 设计:把每个 url 当作一个唯一的资源。
如何设计成一个资源?
三、http headers
1. 常见的 Request Headers
| Header | 解释 |
|---|
| Accept | 浏览器可接收的数据格式 |
| Accept-Encoding | 浏览器可接收的压缩算法,如 gzip |
| Accept-Language | 浏览器可接收的语言,如 zh-CN |
| connection:keep-alive | 一次 TCP 连接重复使用 |
| cookie | HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器 |
| Host | 指定请求的服务器的域名和端口号 |
| User-Agent | (简称 UA )浏览器信息 |
| Content-type | 发送数据的格式,如 application/json |
| If-Modified-Since | 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 |
| If-None-Match | 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 |
2. 常见的 Responce Headers
| Header | 解释 |
|---|
| Content-type | 返回数据的格式,如 application/json |
| Content-length | 返回数据的大小,多少字节 |
| Content-Encoding | 返回数据的压缩算法,如 gzip |
| Set-cookie | 设置Http cookie |
| Cache-Control | 控制强制缓存的逻辑 |
| Last-Modefied | 请求资源的最后修改时间 |
| Etag | 请求变量的实体标签的当前值 |
3. 缓存相关的 headers
属于响应头:
| Responce Headers | 值 | 说明 |
|---|
| Cache-Control | no-cache, no-store, max-age, public, private | 在HTTP1.1版本之后,控制浏览器是否可以缓存资源、强制缓存校验、缓存时间 |
| Expires | 资源缓存过期时间 | 在HTTP1.1版本之前,如果与Cache-Control同时设置,则只有Cache-Control的设置生效。 |
| Last-modified | 请求的资源最近更新时间 | 弱校验, 根据文件修改时间,可能内容未变,不精确 |
| Etag | 文件指纹(hash码、时间戳等可以标识文件是否更新) | 强校验,根据文件内容生成精确 |
属于请求头:
| Request Headers | 值 | 说明 |
|---|
| If-None-Match | 缓存响应头中的 ETag 值 | 发送给服务器比对文件是否更新(精确) |
| If-Modified-Since | 缓存响应头中的 Last-Modified 值 | 发送给服务器比对文件是否更新(不精确) |
四、http 缓存
1. 关于缓存的介绍
- HTTP文件缓存是基于HTTP协议的浏览器端文件缓存机制。
- 在文件重复请求的情况下,浏览器可以根据HTTP响应的协议头信息判断是从服务器端请求文件还是从本地读取文件。
- 哪些资源可以被缓存?---- 静态资源(js css img)
2. http 缓存策略(强制缓存 + 协商缓存)
强制缓存:
- 强制缓存在缓存数据未失效的情况下(即Cache-Control的max-age没有过期或者Expires的缓存时间没有过期),那么就会直接使用浏览器的缓存数据,不会再向服务器发送任何请求。
cache-control 常用值:
| 属性值 | 说明 |
|---|
| max-age | 资源缓存的最大时间 |
| no-cache | 不强制缓存,但有可能协商缓存 |
| no-store | 既不强制缓存,又不协商缓存,反正就是不缓存(气完了) |
| private | 仅向特定用户返回响应 |
| public | 可向任意方提供响应缓存 |
关于 Expires:
- 同在 Response Headers 中。
- 同为控制缓存过期。
- 已被 Cache-Control 代替。
协商缓存(对比缓存):
- 服务器端缓存策略
- 服务器判断客户端资源,是否和服务器端资源一样。
- 一致则返回 304,否则返回 200 和最新资源。
Last-Modified 和 Etag:
- 会优先使用 Etag。
- Last-Modified 只能精确到秒级。
- 如果资源被重复生成,而内容不变,则 Etag 更精确。
3. http 缓存流程图
4. 刷新操作方式,对缓存的影响
| 实现方式 | 缓存策略 |
|---|
| 正常操作 | 地址栏输入 url、跳转链接、前进后退等 | 强制缓存有效,协商缓存有效 |
| 手动刷新 | F5、点击刷新按钮、右击菜单刷新 | 强制缓存失效,协商缓存有效 |
| 强制刷新 | Ctrl + F5 | 强制缓存失效,协商缓存失效 |