http协议缓存控制第一次请求时200 ok 第二次请求304 not modified 为修改状态
解释: 在网络上有一些缓存服务器,另外浏览器自身也有缓存功能,
http协议之缓存
。 当我们第一次访问某个图片的时候,正常下载图片返回200 ok 基于一个前提-图片不会经常改动,服务器在返回200的时候,还返回该图片的”签名“ -- etag (签名可以理解为图片的“指纹”) 当浏览器再次访问该图片时,去服务器校验“指纹” 如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器负担抓包观察:第一次请求:第一次响应头: 在响应头里面可以看到请求的图片信息 etag:"321397979879-fndlsh32yfsh894392" last-modified: Tue, 10 Jun 2018 12:12:12 GMT
第二次请求头:第二次请求头里面: if-modified-since: Tue, 10 Jun 2018 12:12:12 GMT 如果自Tue, 10 Jun 2018 12:12:12 GMT这个时间后图片没有修改则不会重新请求,如果有修改则会重新请求 if-none-match: "321397979879-fndlsh32yfsh894392" 如果该图片最新的etag值 和 if-none-match 的值不匹配,则重新请求
第二次响应头: status code 304 not modified 如果是304就以为这浏览器从本地的缓存中取数据,节省了图片在网络上传输的时间
大网站的缓存:如果网站比较大,有N台缓存服务器,那么这N台缓存服务器如何处理主服务器上的文件? 要不要缓存? 如果缓存该缓存多久呢? 缓存服务器与主服务器之间应该有一些协议,来说明这2个问题用什么协议来说明这两个问题?答:还是http协议,用头信息,cache-control 来控制
利用协议控制缓存(apache服务器):利用协议控制缓存:相关模块是---mod_expiresExpiresActive On ExpiresByType image/jpeg 'access plus 1 month' 控制是否缓存以及缓存周期
在.htaccess中,具体语法如下: ExpiresDefault "
num: 缓存时间的大小 (30) type: 缓存时间的单位 (天) 实例:如果这是在集群环境里,缓存服务器得到此图片,将会认为一个月内有效,从而减轻了主服务器的负担
利用协议取消缓存(apache服务器):如果有些信息不要缓存,必须要去主服务器获取,那么要这样客户端: Cache-Control:no-cache Pragma:no-cache
服务器端清除缓存:相关模块是:mod_header
revalidate:使重新生效,使从新有法律效力