http
http 常见的状态码有哪些
- 状态码分类
- 1xx 服务器收到请求(后台收到的提示)
- 2xx 请求成功 200
- 3xx 重定向 301,302,304
- 4xx 客户端错误,如404
- 5xx 服务端错误,如500
- 常见状态码
- 200成功
- 301 永久重定向(配合location,浏览器自动处理,比如换域名)
- 302 临时重定向(配合location,浏览器自动处理,这次访问新的,下次不一定)
- 304资源未被修改 (资源在本地还有效,不用再请求)
- 404资源未zhaiod
- 403 没有权限
- 500 服务器错误
- 504 网关超时
- 就是一个约定,跟着执行就好了
什么是 Restful-API
- 传统的methods
- get获取服务器数据
- post像服务器提供数据
- 现在的methods
- get 获取数据
- post 新建数据
- put/patch 更新数据 patch(补丁)
- delete 删除数据
- Restful-API
- 一种新的API设计方法(早就推广使用)
- 传统API设计:把每个url当做一个功能
- Restful-API设计:把每个url当做一个唯一的资源
如何设计成一个资源
- 尽量不用url参数
- 用method表示操作类型
不用url参数:
- 传统API设计:/api/list?pageIndex=2
- Restful-API设计:/api/list/2 (第二页的资源)
用method表示操作类型:
传统api设计
Restful-API设计
- 传统是用 api表示功能,用不同的api表示是更新还是创建
- Restful-API把api当成资源,同一个资源(api)的不同操作用method区分是更新还是创建
http 哪些常见 headers
- 常见的Request Headers
- Accept 浏览器可接收的数据格式
- Accept-Encoding 浏览器可接收的压缩算法,如gzip
- Accept-Languange 浏览器可接收的语言,如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
- 自定义 header
Request Headers里会多一个 字段,X-Requested-Width - 缓存相关的headers
http 为何需要缓存
为什么需要缓存:
为了让页面快一点,网络请求比较慢,数据要要缓存,减少网络请求的体积和数量。网络请求具有不稳定性
哪些资源可以被缓存?
静态资源(js css img)在打包完成后,加上哈希,不会被改变
cache-control 是什么意思 - http 强制缓存
cache-control的值
- max-age 设置缓存最大过期时间
- 不用本地缓存,正常请求服务端,交给服务处理(可能有协商缓存)
- 不用本地缓存,不用服务端缓存措施
- private 只能允许最终用户做缓存
- public 允许中间路由或代理也可以做缓存
- Response Headers中,服务器端返回
- 控制强制缓存的逻辑
- 例如cache-control:max-age=31536000(单位是秒) 给资源加上最大缓存时间一年
再次请求的时候,判断cache-control设置的时间有没有过期,没有就会在本地缓存找资源 减少网络请求。如果缓存过期,去服务器请求,又返回资源和cache-control
关于Expires
- 同在Response Headers
- 同为控制缓存过期
- 已被cache-control取代
Etag 和 Last-Modified 是什么意思 - http 协商缓存
协商:带着资源标识判断
- 服务端缓存策略,服务端判断资源是否用缓存
- 服务器判断客户端资源,是否和服务端资源
- 一致则返回304,否则返回200和最新的资源
资源标识
在Response Headers中:
- Last-Modified 资源的最后修改时间
- Etag 资源的唯一标识
在请求头Request Headers中:
- if-Modified-Since,也是资源的最后修改时间 ,是服务器传过来的Last-Modified值
- if-Node-Match,也是资源的唯一标识,是服务器传过来的Etag值
- 会优先使用Etag
- Last-Modified只能精确到秒级
- 如果资源被重复生成,而内容不变,则Etag更精确
- 如果同时设了 ETag 和 Last-Modified,那么必须同时满足 ETag 和 Last-Modified一致才会 返回304
http缓存综述
刷新页面对 http 缓存的影响
三种刷新操作
- 正常操作:地址栏输入url,跳转链接,前进后退等
- 手动刷新:F5,点击刷新按钮,点击菜单刷新
- 强制刷新:ctrl+F5
不同刷新操作,不同的缓存策略
- 正常操作:强制缓存有效,协商缓存有效
- 手动刷新:强制缓存失效,协商缓存有效
- 强制刷新:强制缓存失效,协商缓存失效