host缓存,浏览器缓存---解决host缓存带来的伤

1.缓存

缓存,对应工程师来讲简直太熟悉了,太方便了,省略到资源或数据的获取方式,直接缓存到离用户访问最快的地方,也降低服务器的压力,比如:

(1)静态文件获取

服务器->cdn->本地磁盘->本地内存

(2)数据获取

数据库->内存型数据库

(3)host 缓存

主域名服务器->顶级域名服务器->根域名服务器->网络服务提供商缓存->路由器缓存->系统缓存->浏览器缓存

缓存的好处不言而喻,提升用户的访问速度,降低服务端的压力,问题就是:多份数据放在不同的地方,缓存数据一致性问题很关键。本次主要就host缓存中最常用的浏览器缓存讲讲。

2.说说浏览器缓存

名词解析:

(1)expires 和 cache-control 的区别:

相同:都是用来判断该资源的本地缓存的过期时间

expires:是绝对时间,所以如果服务器和本地时间不一致,可能都会有问题

cache-control:是相对时间,兼容性更好

2.1 浏览器缓存分类

浏览器缓存分为强缓存和协商缓存,匹配缓存的流程:

(1)浏览器发送请求前,根据请求头的 expires 和 cache-control 判断是否命中强缓存策略,如果命中,直接从缓存获取资源,并不会发送请求,响应码为:200(from memory cache 或者 from disk cache),如果没有命中,则进入下一步。

(2)没有命中强缓存规则,浏览器会发送请求,根据请求头的 last-modified 或 etag 判断是否命中协商缓存,如果命中,服务器并不会返回这个资源,而是返回一个 httpCode(304),浏览器根据这个 httpCode 从本地缓存加载文件。

(3)如果前两步都没有命中,则直接从服务端获取资源,并缓存在本地

2.2强缓存

2.2.1强缓存原理:

强缓存需要服务端设置 expires 和 cache-control。

(1)第一次从服务器请求资源,服务器返回资源时,在 respone 的 header 加上 cache-control

(2)接收到资源后,会把资源连同所有 response header 一起缓存下来(所以缓存命中的请求返回的header是来自缓存的header)

(3)再次访问这个资源时,先从缓存中找,找到后如果请求时间在缓存中设置的 cache-control 之前,则直接从缓存中加载文件

(4)如果缓存没有命中,浏览器直接从服务器加载资源时,Cache-Control 在重新加载的时候会被更新

2.2.2 强缓存分类

(1)from disk cache:缓存在硬盘,浏览器关闭,缓存还在

(2)from memory cache:缓存在内存,浏览器关闭,缓存清除

2.3协商缓存

浏览器没有命中强缓存,就会发送请求到服务器,验证是否命中协商缓存,如果命中,则服务其不会返回文件,返回 httpCode(304 not modified),浏览器从本地缓存加载文件

2.3.1 协商缓存管理

协商缓存是利用的是【Last-Modified,If-Modified-Since】和【ETag、If-None-Match】这两对Header来管理的。

(1)发送请求服务器文件后,response header 里面增加了 Last-Modified,表示最新修改时间

(2)当重新发送请求获取此文件时,request header 带上 If-Modified-Since,表示 上次请求缓存在本地文件里面的 response header 里面 Last-Modified

(3)服务器收到请求后,根据请求头 If-Modified-Since 跟服务器文件的最新修改时间做对比,没有变化,返回 httpCode(304 not modified),response header 中不会再添加 Last-Modified 的header,这就表示命中了协商缓存

(4)如果协商缓存没有命中,浏览器直接从服务器加载资源时,Last-Modified Header 在重新加载的时候会被更新,下次请求时,If-Modified-Since 会变成上次返回的 Last-Modified 值。

改进:存在服务器文件内容发生修改,但是修改时间却没有改变,所以产生了 etag,根据文件内容生成一个字符串,文件内容发生变化,etag就会改变,不再依赖于修改时间。

3.host缓存带来的问题和原因

1.网站换机器了,缓存的 ip 和 域名 未及时发生变更,导致网站访问不了

reason: dns缓存有一定的失效时间,如果dns缓存的是你的服务器的真实ip和域名映射,如果服务器不可用了,上面看到的host缓存链路,基本上都不会失效缓存,就导致访问不了

resolve: 直接缓存 域名 和 服务器,就必须保证 服务器永远可用,否则就会导致部分用户用不了,所以我们一般将 域名 绑定到代理服务器,代理服务器只负责接受、转发请求和负载均衡,不负责应用发布、升级等,所以代理服务器几乎不会挂,所以大大解决了 dns 缓存带来的不可访问的问题

2.修改了host,用浏览器访问依旧访问到改之前的ip上

reason:这个一般就是 浏览器缓存 或者 系统缓存。

resolve:清除浏览器缓存或者系统缓存即可

3.修改了host,访问部分资源是旧的资源,部分资源是新的资源

reason:新版本浏览器,很多都开启了内存缓存,会将部分数据或者文件缓存到本地内存中,但修改了host 还是访问的是缓存到内存的数据

resolve:清除掉浏览器内存和内存缓存。

4.一招清理浏览器缓存

4.1 chrome浏览器

(1)访问: chrome://net-internals/#dns

(2)点击右上角倒三角:clear cache ,即可清除掉 域名 和 ip的缓存

(3)点击右上角倒三角:flush sockets,即可关闭掉已经打开的sockets

(4)再次访问域名,即可访问到正确的ip和资源

如何根治关闭掉浏览器缓存:

(1)打开浏览器 “检查”

(2)检查框右上角三个点,选择 more tools

(3)选择 network condition

(4)选择 disable cache

4.2 safari 浏览器

关闭浏览器缓存:

原理:发送请求时,请求头带上了 no-cache

原文地址:https://www.cnblogs.com/jijiji/p/9865138.html

时间: 2024-12-13 21:31:22

host缓存,浏览器缓存---解决host缓存带来的伤的相关文章

jQuery中ajax的使用与缓存问题的解决方法

jQuery中ajax的使用与缓存问题的解决方法 1:GET访问 浏览器 认为 是等幂的就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果 POST则 认为是一个 变动性 访问 (浏览器 认为 POST的提交 必定是 有改变的) 防止 GET 的 等幂 访问 就在URL后面加上 ?+new Date();,[总之就是使每次访问的URL字符串不一样的] 设计WEB页面的时候 也应该遵守这个

以浏览器为载体的缓存机制

1.web缓存的种类: (1)数据库的缓存 我们可能听说过memcached(高性能的缓存系统),它就是一种数据库层面的缓存方案,数据库缓存是指,当web应用的关系比较复杂,数据库中的表很多的时候,如果进行频繁的数据库查询,很容易导致数据库不堪重负.为了提供查询的性能,将查询的数据放在能存中缓存,下次查询的时候,直接从内存直接返回.效率高. (2)CDN缓存 CDN缓存一般是由网站管理员自己部署,为了让他们的网站更容易扩展获得更好的性能,通常情况下,web向CDN网关发起web请求,网关服务器后

缓存(CDN缓存,浏览器(客户端)缓存)

1.什么是缓存? 缓存是一个到处都存在的用空间换时间的例子.通过使用多余的空间,我们能够获取更快的速度. 首先,看看没有网站没有接入CDN时,用户浏览器与服务器是如何交互的: 用户在浏览网站的时候,浏览器能够在本地保存网站中的图片或者其他文件的副本,这样用户再次访问该网站的时候,浏览器就不用再下载全部的文件,减少了下载量意味着提高了页面加载的速度. 但是如果在中间加上一层CDN,那么用户浏览器与服务器的交互如下: 客户端浏览器先检查是否有本地缓存是否过期,如果过期,则向CDN边缘节点发起请求,C

解决iframe缓存机制导致页面不清除缓存不刷新页面的bug

在使用iframe时,已有页面嵌套了一个iframe页面,当这个页面提交后再次跳转到本页面时,原本iframe内的页面应该刷新数据的,结果未刷新,需要清除缓存后才刷新. 解决方案: var fresh_link=new Date().getTime();//获取当前时间戳,因为该时间戳唯一,将其加到跳转的iframe嵌套页面那,以防止iframe子页面访问过后遗留的缓存 window.open("link.html?+'fresh_link'", "_self");

如何解决因为缓存无法及时更新图片问题

如何解决因为缓存无法及时更新图片问题:在加载远程图片的时候,往往会由于缓存的原因,即使是在服务器更新了图片有时候也得不到及时的更新.可以使用如下方法解决此问题,代码如下: $(".myImg").src("yourUrl.action?randUrl"+Math.ceil(new Date()/3600000); 实现的原理很简单,就是让每次加载的图片的src属性不同就可以做到了,这个时候可能很多人认为每次图片的src属性不同的话,图片不久乱了吗,其实不然,看一个例

ECSHOP 缓存问题的解决方法

ECSHOP的缓存存放在templates/caches/文章夹下,时间长了这个文件夹就会非常庞大,拖慢网站速度.还有很多情况我们不需要他的缓存.模板堂整理本文介绍禁用ECSHOP缓存的方法. ECSHOP的缓存有两部分,一部分是SMARTY的页面缓存:另一部分是SQL查询结果的缓存.这两部分都是保存在templates/caches/文件夹下.只要我们分别关闭这两个功能,就可以完全禁用ECSHOP的缓存.当然你也可以根据自己的需要关闭其中某一个. /*1.关闭SMARTY的缓存: 打开incl

DNS缓存失败怎么解决?

DNS的中文名是域名系统,是域名和IP地址相互映射的一个分布式数据库.有了DNS,我们上网时直接输入网站域名(即网址)即可,而不用输入网站的IP地址访问网站,对于用户来说比较方便记忆和访问. 每次当我们访问一个网站时,DNS就会有一定的缓存信息,当这个缓存信息太多时,在访问某些网站时就无法打开,需要我们清除本机的DNS缓存信息. 下面我们就来介绍怎么查看电脑的DNS缓存信息以及如何清除DNS缓存信息. 查看电脑DNS缓存信息的方法 1.使用"WIN+R"打开运行对话框,输入cmd,按下

TimesTen 应用层数据库缓存学习:12. 管理缓存环境

缓存和复制代理的启停和状态查看 cache agent的作用是将监控Oracle中数据的变化,并更新到TimesTen.因此,对于只读和AWT缓存组,cache agent都是必需的. cache agent的启停 ttisql> call ttcachestart ttisql> call ttcachestop 或者 $ ttadmin -cachestart DSN $ ttadmin -cachestop DSN replication agent的启停 ttisql> call

缓存机制总结(JVM内置缓存机制,MyBatis和Hibernate缓存机制,Redis缓存)

一.JVM内置缓存(值存放在JVM缓存中) 我们可以先了解一下Cookie,Session,和Cache Cookie:当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你.具体来说Cookie机制采用的是在客户端保持状态的方案(保存客户浏览器请求服务器页面