常用HTTP状态码以及客户端缓存

常用状态码

200 请求返回成功
301 永久重定向
302 临时重定向
304 资源未更改(对应笔记中客户端缓存)
400 客户端代码错误
401 未认证
403 forbidden,服务端理解客户端的请求,但拒不执行
404 页面,资源找不到
405 请求方法不被允许
500 服务端不可预知的错误
502 bad gateway 网关请求服务器拿到无效返回
503 系统当前不可用
504 服务器超时

由304引出的客户端缓存

HTTP1.0时使用expires来保存失效时间,当响应头有这个字段时,浏览器强制缓存,即,下次再访问这个文件,直接从缓存中读取,不向服务器发送请求
缺点:这个时间是服务端返回的服务端时间,客户端时间与服务端时间可能不一致

HTTP1.1时使用cache-control作为是否缓存以及缓存策略的字段
cache-control:
1. no-store 不进行任何形式缓存
2. no-cache 不直接使用缓存,其实在浏览器是存储了的,进程内存/硬盘,需要请求服务端进行校验资源是否修改,未修改则返回304,空body,使用缓存,不然,重新返回响应体,状态码200 协商缓存
3. max-age 这个时间之内都可以直接从缓存中获取,不用重新请求,强缓存
4. private 只能客户端缓存,不允许代理服务器进行缓存
5. public 都可以进行,客户端以及代理服务器,如cdn
返回的max-age = 0与no-cache等价,都是每次都去服务器校验更新状态

浏览器请求过程
浏览器第一次访问请求,服务器返回Last-Modified(服务器最后修改文件的时间),Etags(当前文件的版本),如果是no-cache或max-age则将响应体和缓存标识存入浏览器缓存中
第二次请求,max-age直接从缓存中获取数据,no-cache从缓存中获取标识去请求服务端,字段为if-modified-since和if-None-Match,先校验if-None-Match与服务器etags,再校验if-modified-since,如果没有更改,则返回标识和空的响应体,状态码304,资源未改变,不然返回200及新的缓存标识和响应数据
使用if-modified-since缺点
1. 如果资源修改时间更新了,但是内容没有修改,那么达不到缓存的目的
2. 如果资源在毫秒之间更改,但是缓存的last-modified时间保存的是秒,这时候是不应该使用缓存的

强缓存:减少请求,就减少了带宽时间,强缓存未失效的话返回状态码永远是200
协商缓存:请求数不变,但是304状态只会返回空的响应体,节省传输时间

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网络特有的延迟以及数据传输的成本,制约互联网快速获取Web资源。为此,HTTP协议引入缓存以空间换时间,使浏览器缓...
    大头8086阅读 3,113评论 2 12
  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,919评论 0 3
  • 浏览器对于请求资源, 流程如图所示: 可以看到浏览器的缓存机制分为两个部分: 1、当前缓存是否过期? 2、服务器中...
    zhoulujun阅读 1,246评论 0 3
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,776评论 0 6
  • 本文内容大多参考《图解HTTP》一书 一. 认识代理服务器 所以讲缓存为什么要先扯代理服务器?别急,让我们看一下一...
    流光号船长阅读 1,999评论 0 10