常见的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。
彻底弄懂强缓存与协商缓存
浏览器缓存
博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/42951.html