http methods
传统API设计:把每个url当作一个功能
- get\post\put(patch)\delete
restful API:把每个url当作一个唯一的资源
- 如何设计成一个资源?
- 尽量不适用url参数
- 传统: /api/list?pageIndex=2
- restful: /api/list/2
- 用method表示操作类型
- 传统:
- restful:
http headers
Request Headers 客户端向服务端发的headers
- Accept:浏览器可接收的数据格式
- Accept-Encoding: 浏览器可接收的压缩算法,如gzip
- Accept-Languange:浏览器可接收的语言,如zh-CN(中文)
- Connection:keep-alive : 一次TCP连接重复使用
- cookie: 同域请求浏览器自动发送cookie
- HOst: 请求的域名
- User-Agent(UA):浏览器信息
- Content-type:发送数据的格式,如 application/json
- if-Modified-Since对应Last-Modified 资源最后修改时间,精确到秒
- If-None-Match对应Etag: 资源唯一表示,类似人类指纹,优先级高于if-modified-since,资源重复生成,但内容不变时用etag更合理
Response Headers 服务端向客户端返回的headers
- Content-type:返回 数据的格式,如 application/json
- content-length: 返回数据的大小,多少字节
- content-Encoding: 返回数据的压缩算法,如gzip
- Set-cookie: 服务端修改cookie(浏览器本地被修改)
以下 response headers 与缓存有关:
- Expires 同为控制缓存过期的REsponse Header,已经被Cache-Control取代;现在浏览器依然兼容,但优先级低于cc
- Last-Modified: if-Modified-Since 资源最后修改时间
- Etag: If-None-Match 资源唯一表示,类似人类指纹
- Cache-Control: Expires 如 max-age=31536000 (秒,一年) 服务端把认为可以缓存在浏览器本地的资源给加上这个header,控制强制缓存的逻辑
- max-age:最大缓存时间
- no-cache: 不做本地缓存
- no-store: 不做本地缓存,也不做服务端缓存,很少见
- private: 只允许最终用户作为缓存
- public: 最终用户、中间路由都可缓存
自定义header
- 可用于特殊验证
http缓存
缓存:把没必要重新获取一遍的资源放到本地
为什么需要缓存?
- 网络请求过慢,应减少网络传输内容数量、体积
- 网络请求不稳定,随时可能没信号
- 提高加载效率
- 静态资源(js、css、img,通过webpack打包后contenthash值是否变化来判断是否更新)可以缓存,有可能被修改的,如数据,不应缓存
缓存策略
强制缓存
协商缓存(对比缓存)
是一个服务端缓存策略
- 服务端判断客户端资源是否和服务端一致
- 一致则返回304,否则返回200和资源
刷新操作方式,对缓存的影响
- 正常操作:强制缓存有效,协商缓存有效; 浏览器地址栏输入url、跳转连接、前进后退等;
- 手动刷新:强制缓存失效,协商缓存有效; F5,点击刷新按钮,右击菜单刷新;
- 强制刷新:强制缓存失效,协商缓存失效; Ctrl+F5;