http状态码
- 1xx 服务器收到请求
- 2xx 请求成功
- 201 Created 已创建。成功请求并创建了新的资源,用户创建,资源创建成功等
- 204 No Content 无内容。服务器成功处理,用于删除,更新成功等
- 3xx 重定向
配合
location字段,浏览器自动处理- 301 永久重定向
- 302 零临时重定向
- 304 Not Modified 资源未被修改,告诉浏览器从缓存中获取
- 4xx 客户端错误
- 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求,比如用户没有权限
- 5xx 服务端错误
- 500
- 504 网关超时
RestfulAPI
传统的 methods
- get 获取服务器数据
- post 向服务器提交数据
简单的网页就这两个操作
现在的 methods - RestFullAPI
- get 获取数据
- post 新建数据
- patch/put 提交数据
- delete 删数据
RestfulAPI
- 是一种新的API 设计方法
- 传统API是把每个url当做一个功能
- Restful API 是把每个URL当做一个唯一的资源
如何设计成一个资源
- 尽量不使用url参数
- 用method表示操作类型
不使用url参数
- 传统API:
/api/list?pageIndex=2 - RestfulAPI::
/api/list/2
用method表示操作类型
传统设计
- post 请求:
- 创建博客
/api/create-blog - 更新博客数据
/api/update-blog?id=100
- 创建博客
- get 请求:
- 获取博客内容:
/api/get-blog?id=100
- 获取博客内容:
RestfulAPI 设计 用method表示操作类型
- post 请求 创建博客
/api/blog - patch 请求 更新博客数据
/api/blog/100 - get 请求 获取博客数据
/api/blog/100
HTTP Headers
常见的Request Headers

Accept浏览器可接受的数据格式Accept-Encoding浏览器可接收的压缩算法,如 gzip 使得资源变小,传输速度加快Accept-Language浏览器可接收的语言,如 zh-CN- Connection: keep-alive 一次tcp链接的重复使用
- cookie
- host 请求域名
- User-Agent(UA)浏览器信息,比如系统,移动端机型等
- Content-type 发送数据的格式
- application/json
常见的Response Headers

- Content-type 返回的数据格式,application/json
- Content-length 返回数据的大小, 多少字节
- Content-Encoding 返回数据的压缩算法,gzip
- Set-Cookie 服务端修改cookie
缓存相关headers
- Cache-control Expires
- Last-Modified If-Modified-Since
- Etag If-None-Match
http 缓存控制 链接:详细笔记与演示
- 什么是缓存?为什么需要缓存? 数据在网络上的传输是大量的,如果重复传输不必要的内容就会很耗费流量以及加载时间 所以就有了缓存 缓存是存储在用户本地的数据,用户请求时可以从本地获取而不再依赖于服务端的传输
- 哪些资源可以被缓存?
静态资源
js/css/img,一旦上线就不可能被修改 html一般不会被缓存,会常常更新
强制缓存 Cache-Control
- Response Headers中
- 控制强制缓存的逻辑
例如缓存一年的时间
Cache-Control: max-age=3153600 // 毫秒

cache-control 的值
- max-age:毫秒级别的过期时间
- no-cache:不使用强制缓存,交给服务器处理
- no-store: 不用本地缓存并且不使用服务器缓存,更彻底(不常见)
- private:只允许最终用户做缓存
- public:允许中间的路由或代理做缓存
Expires
- 同在Response Headers中
- 同为缓存控制,但是已经被catch-control替代
协商缓存(对比缓存)
- 是一个服务端缓存策略,通过服务端判断一个资源是否可以使用缓存,并不是说缓存在服务端
- 判断服务端和客户端资源是否一样,如果一致则返回
304否则返回200和最新的资源

- 在Response-Headers中有两种
- Last-Modified:资源的最后修改事件
- Etag:资源的一个唯一标识(通过hash算法加密生成的md5值,通过
base64展示)
Last-Modified 与 If-Modified-Since

Etag 与 If-None-Match

Last-Modified 和 Etag
- 会优先使用Etag,因为Last-Modified只能定位到秒级
- 如果资源被重复生成,而内容不变,Etag就非常精确

三种刷新操作以及缓存状态
- 正常操作:地址栏输入url,跳转链接,前进后退等(普通用户使用) 强制缓存有效,协商缓存有效
- 手动刷新:F5,点击刷新按钮,右击菜单刷新 强制刷新无效,协商缓存有效
- 强制刷新:ctrl + F5 全部失效