http状态码之304

常见的http状态码:
100 继续发送请求
101 切换协议 
200 成功
301 永久重定向
302 暂时重定向
400 语法错误
403 没有足够的权限
404 找不到对应的资源
500 服务器内部错误
503 服务不可用

3XX系列的状态码表示重定向,这系列中的304比较特殊,304 的标准解释是:客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户端,原来缓冲的文档还可以继续使用。

浏览器缓存

浏览器缓存是浏览器将用户请求过的静态资源(html、css、js),存储到电脑本地磁盘中,当浏览器再次访问时,就可以直接从本地加载了,不需要再去服务端请求了。

缓存带来的优点:
减少了冗余的数据传输,节省网费;减少服务器的负担,提升网站性能;加快客户端加载网页的速度等

状态码来区分其为两大类,分别是强制缓存–200和协商缓存–304

强制缓存

强制缓存是这样操作的:如果资源没过期,就取缓存,如果过期了,则请求服务器。

那么如何判断资源是否过期呢?
主要是看 response headers (请求头)中的 Cache-Control 的值,比如Cache-Control 的max-age = 31xxxxxxx,表示在这些秒内,都直接使用缓存,超过了就继续请求服务器。如果Cache-Control的值是no-cache,说明没命中强缓存,那么就选择协商缓存

和 Cache-Control 并列的,还有一个 Expires ,听说已经被淘汰了,这里就不进行讨论了。

协商缓存

强制缓存是为了给客户端自给自足用的。当客户端请求该资源时发现其过期了,即Cache-Control 的值为 no-cache (不强缓存)或者 max-age 过期了 (强缓存,但总有过期的时候),协商缓存就被触发。协商缓存是需要客户端和服务器两端进行交互的。

协商缓存使用到了headers请求头里的两个字段:
ETag:每个文件有一个,改动文件了就变了,为了应对资源修改时间可能很频繁的情况出现的,是基于资源的内容计算出来的值
Last-Modified:文件的修改时间,精确到秒

每次请求返回来 response header 中的 etag和 last-modified,在下次请求时在 request header 就把这两个带上,服务端把你带过来的标识进行对比,然后判断资源是否更改了,如果更改就直接返回新的资源,和更新对应的response header的标识etag、last-modified。如果资源没有变,那么etag、last-modified就不变,这时候对客户端来说,每次请求都是要进行协商缓存了,即:
发请求–>看资源是否过期–>过期–>请求服务器–>服务器对比资源是否真的过期–>没过期–>返回304状态码–>客户端用缓存的老资源
这就是一条完整的协商缓存的过程。

所以协商缓存步骤总结如下:
(1)请求资源时,把用户本地该资源的 ETag 同时带到服务端,服务端和最新资源做对比。
(2)如果资源没更改,返回304,浏览器读取本地缓存。
(3)如果资源有更改,返回200,返回最新的资源。

协商缓存与强制缓存的区别在于强制缓存不需要访问服务器,返回结果是200,协商缓存需要访问服务器,如果命中缓存的话,返回结果是304。

彻底弄懂强缓存与协商缓存
浏览器缓存
博客

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值