nginx-13 浏览器缓存

在这里插入图片描述
浏览器的缓存由头信息中的几组参数控制。

etag/if_None_match

在这里插入图片描述
它默认是开启的,新建个站点,不做任何处理

server{
	listen 80;
	server_name mydomain.com;
    index index.html;
    root   /www/wwwroot;
}

第一次访问时:
在这里插入图片描述
服务器返回一个Etag参数,"5c73f24b-8e"是服务器对资源的唯一标识,代表的就是index.html找个资源。这个资源可以理解为html代码,"5c73f24b-8e"可以理解为计算index.html代码字符串加密后的值(实际并不一定如此)。

etag = md5('<html lang="en"><head><meta charset="UTF-8"></head><body>hello world!</body</html>'); //etag=5cccf1da44e9c792261ab30796ece8e9
修改资源后
etag = md5('<html lang="en"><head><meta charset="UTF-8"></head><body>hello world123456!</body</html>');//etag=78cdf080f36820c01ca36ba9dfae4586

此时浏览器将index.html的资源缓存起来,并且将etag值储存起来。

第二次访问时:
在这里插入图片描述
浏览器用if_none_match参数携带上一次服务器返回的etag值
If-None-Match "5c73f24b-8e",问服务器if_none_match? (是否没有匹配到资源?),服务器会将资源重新生成etag, 如果仍然是"5c73f24b-8e",说明资源并没有被修改,则直接返回304,告诉浏览器从浏览器中的缓存中读取。

当修改资源时:
将index.html编辑修改后
在这里插入图片描述
第一次和第二次请求对比
在这里插入图片描述

Last-Modified/If-Modified-Since

如果对上面理解的话,这组参数很容易就能明白了。modified修改
资源没有被修改的情况:
在这里插入图片描述
上一次和这一次,服务器告诉浏览器资源修改时间是一样的,说明资源一直没有被修改。
当修改文件后
在这里插入图片描述
last-Modified > if-Modified-Since 说明资源修改过了。

Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。

cache-controll

Last-Modified与ETag固然是大大节省了带宽和服务器压力,但是每个请求都进行etag计算和对比,当一个网页有大量的资源请求时,对服务器也有一定的压力。

有些资源如图片、js\css,我们确保其在一定时间内不会有改变,则告诉浏览器不需要向服务器请求,直接加载浏览器缓存即可。

cache-controll大量应用在网站上,比如CNDN论坛
在这里插入图片描述
在这里插入图片描述
原理图
第一次请求:
在这里插入图片描述
第二次请求:
在这里插入图片描述
有关expires这篇文章比较好
https://www.cnblogs.com/dee0912/p/4743768.html?tdsourcetag=s_pcqq_aiomsg

猜你喜欢

转载自blog.csdn.net/yt_php/article/details/87940309