HTTP
常见状态码
- 1 开头 表示服务器接收到请求(使用较少)
- 2 开头 表示加载成功 200 加载成功
- 3 开头 表示重定向 301永久重定向 302 临时重定向 304 缓存未改变
- 4 开头 表示客户端错误 404 页面未找到
- 5 开头 表示服务端错误
Restful 风格 url
传统风格url
- 查询 /user/query?name=tom GET
- 详情 /user/getInfo?id=1 GET
- 创建 /user/create?name=tom POST
- 修改 /user/update?id=1&name=jquery POST
- 删除 /user/delete?id=1 GET
RESTful风格
- 查询 /user?name=tom GET
- 详情 /user/1 GET
- 创建 /user POST
- 修改 /user/1 PUT
- 删除 /user/1 DELETE
http herders
Request Headers
- Accept 浏览器可接受的数据格式
- Accept-Encoding 浏览器可接收的编码
- Accept-Languange 浏览器可接受的语言,如zh-CN
- Connection: keep-alive 一次TCP连接重复使用
- cookie 由浏览器生成,向服务器发送
- host 请求的域名
- User-Agent 浏览器信息
- Content-type 发送数据的格式,如application/json
Response Headers
- Content-type 返回数据格式
- Content-length 返回数据的大小
- Content-Encoding 返回数据的编码
- Set-Cookie 服务端修改cookie
缓存 Header
- Last-Modified 和 If-Modified-Since
- ETag 和 If-None-Match
- Cache-Control
- Expires
自定义 header
可以自己定义请求头
HTTP 缓存
- 缓存介绍
- http 缓存策略(强制缓存,协商缓存)
- 刷新操作方式
缓存介绍
什么是缓存: 可以将一些重复,没必要重复加载的文件 保存下来。
缓存作用: 加快网页加载速度,网络请求是整个页面加载中最耗时的部分,并且网络是不稳定的,可能加剧耗时
可以被缓存的文件: 静态资源 (js css img)
缓存策略
一般来说,缓存方式分为两种 强制缓存与协商缓存
强制缓存
通过服务端控制
初次请求时,服务端会返回资源,并在请求头
中设置 Cache-Control 表示可以将该资源缓存。
再次请求时,客户端即可以从本地缓存中直接读取,耗时很少
如果缓存失效,则会再次请求服务端,服务端会再次返回资源,并设置缓存时间
Cache-Control
- max-age 设置最大缓存策略
- no-cache 表示不用强制缓存,每次都从服务端获取
- no-s tore 表示不用本地缓存,也不用服务端缓存策略,交给服务端处理
- private 只允许最终用户做缓存
- public 允许中间路由,中间代理做缓存
- 以前有种Expires 标准被 Cache-Control 代替
强制缓存会在返回头重设置Cache-Control 里面有最长缓存时间 ,是否允许代理服务器缓存,每次发送请求都会首先检查缓存是否失效,如果未失效则会直接触发强制缓存,否则才会发送请求去除法协商缓存
协商缓存
- 是一种服务端缓存策略
- 相比于强制缓存的自给自足,协商缓存就更类似于最后的一道兜底措施
- 服务端判断客户端资源,是否和服务端资源一样
- 一致则返回304,否则返回200 和最新的资源
- 过程,初次请求时,服务器返回资源和资源标识,再次请求时,客户端带着资源表示去向服务器发起请求,服务器判断如果资源标识一样则返回304,否则返回新资源与新的资源标识
- 资源标识: 在Response Headers中,Last-Modidied 资源最后修改时间,Etag 资源的唯一标识 优先使用Etag
- 协商缓存流程 **发请求–>看资源是否过期–>过期–>请求服务器–>服务器对比资源是否真的过期–>没过期–>返回304状态码–>客户端用缓存的老资源。**并且每次请求后,都会记录下客户端最后一次发送请求中返回头中的Etag 与 last-modified(如果返回头的状态码是200才记录,否则不记录)
常规流程
第一次当客户端向服务器发起请求时,服务器会返回资源与状态码200,并且会在Response Headers 中返回 Cache-Control Etag Last-Modidiied 用于缓存操作
当客户端再次向服务器发起请求,服务器首先会检查本地 max-age 如果未超过最大缓存时间则会触发强制缓存,然后从本地读取资源并返回状态码304
否则判断是否有Etag 与 last-Modified 如果有,则会想服务器发送http请求带有if-modified-since 或 if-modified-since 如果 服务器判断缓存可用则会返回状态码304 然后客户端读取缓存(在这个过程中优先使用Etag 他有 一个 is none match 如果服务器判断Etag相等则将if none match 设为false 并返回304,如果设为true 还有最后的办法判断 if-Modified-Since 服务器会把这个时间与文件最后修改时间作比较,如果时间相同,则返回304)
否则客户端重新发起http请求,想服务器重新申请资源
刷新操作
正常操作: 输入url 对缓存有效 协商缓存有效
手动刷新 F5 : 强制缓存失效 ,协商缓存有效
强制刷新 : crtl + F5 强制缓存失效,协商缓存失效