浏览器缓存

HTTP 1.0

在HTTP1.0中,可以在服务端设置 Expires 的HTTP头来告诉客户端在多久之后重新请求服务,可以通过 if-modified-since 的条件请求来使用缓存,其中发送时间是文件最初被下载的时间,而不是过期时间。如果文件没有改变,服务器可以响应 304-Not Modified 表示文件未改变,客户端可以继续使用缓存的文件。

HTTP1.0中服务器在返回时,可以通过在响应头中添加 Last-Modified 的方式表示资源上一次更改时间。请求时传递的if-modified-since值就是Last-Modified的值。但是这个时间仅仅只能代表编辑时间,如果文件内容没有变化,一样会修改这个时间,所以再次请求还是会重新加载资源,而不会使用缓存。

HTTP 1.1

引入了文件标签 e-tag ,e-tag 是文件或对象的唯一标识,也就是一个MD5值,e-tag通过Response Heasers 返回。e-tag 在使用时会结合 If-None-Match 搭配使用,当缓存过期时,浏览器会在请求头中设置 If-None-Match,值服务端返回的e-tag值(MD5),当文件未发生变化时,MD5值是不变的,此时服务端可以响应 304 状态码,浏览器继续使用本地缓存,如果返回200,则服务器返回新的文件和新的 e-tag值。

HTTP1.1中还增加了新的缓存控制参数,就是Cache-Control,在浏览器请求服务器资源时设置。如下就是Cache-Control的使用案例,表示这个Response缓存时间是0,也就是说每次请求都会重新获取资源,不会使用缓存。

cache-control: max-age=0

Cache-Control 的优先级高于 Expires ,当同时设置时,使用 Cache-Control 的设置来判断。cache-control可以设置的参数有多个,而且请求头和响应头的可选参数是不一样的。

请求头中Cache-Control可选参数

字段名字参数说明
no-cache告知(代理)服务器不使用缓存,强制向服务器发起请求
no-store不缓存请求或相应的任何内容
max-age=seconds必须,单位:秒告知服务器客户端希望接收一个存在时间不大于(seconds)的资源
max-stale(=seconds)可省略,单位:秒告知服务器愿意接收一个超过缓存时间的资源,如果有指定seconds,则值为seconds,没有指定则表示任意超出时间
min-refresh=seconds必须,单位,秒告知服务器希望接收一个在小于seconds秒内被更新过的资源
no-transform告知服务器客户端希望获取实体数据没有被转换的资源(比如不被压缩)
only-if-cached告知服务器客户端希望获取缓存的内容,如果存在缓存,则不用向源服务器发去请求
cache-extension-自定义扩展值,若服务器不识别该值将被忽略掉

响应头中Cache-Control可选参数

字段名字说明
public表明任何情况下都得缓存该资源(即使是需要HTTP认证的资源)
private[=“filed-name”]可省略表明赶回报文中全部或部分(若指定了filed-name则为filed-name的字段数据)
仅开放给某些用户(服务器指定的share-user,如代理服务器)做缓存使用,
其他用户则不能缓存这些数据
no-cache可省略不直接使用缓存,要向服务器确认有效性
no-store不缓存请求或响应的任何内容
no-transform代理不可更改媒体类型
must-revalidate当前资源一定是向源服务器发起请求验证有效性的,若请求失败返回504
proxy-revalidate要求代理缓存服务器对缓存有效性进行再次确认
max-age=seconds必须,单位:秒告知客户端该资源的有效时间
s-maxage=seconds必须,单位:秒公共缓存服务器相应的最大age值
cache-extension-自定义扩展值,如果浏览器不识别该值将被忽略

需要注意的是以上这些参数都是需要使用HTTP1.1及以上才有用的,其中no-store的优先级最高。

常见的HTTP状态码

内容源自菜鸟教程,个人整理所需,无意侵权,源地址:
https://www.runoob.com/http/http-status-codes.html

状态码英文名称描述
200OK请求成功。一般用于GET与POST请求
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy用代理。所请求的资源必须通过代理访问
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
408Request Time-out服务器等待客户端发送的请求时间过长,超时
500Internal Server Error服务器内部错误,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求

参考内容:

上野宣《图解HTTP》

https://blog.csdn.net/u012375924/article/details/82806617
https://www.jianshu.com/p/cd9f28d35727
https://www.runoob.com/http/http-status-codes.html
0065ZvZxgy1g58mk7jzpij308c0auglr_看图王.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值