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

1.web缓存的种类:

(1)数据库的缓存

  我们可能听说过memcached(高性能的缓存系统),它就是一种数据库层面的缓存方案,数据库缓存是指,当web应用的关系比较复杂,数据库中的表很多的时候,如果进行频繁的数据库查询,很容易导致数据库不堪重负。为了提供查询的性能,将查询的数据放在能存中缓存,下次查询的时候,直接从内存直接返回。效率高。

(2)CDN缓存

  CDN缓存一般是由网站管理员自己部署,为了让他们的网站更容易扩展获得更好的性能,通常情况下,web向CDN网关发起web请求,网关服务器后面对应了一台或者多台负载均衡的服务器,会根据他们的负载请求,动态的将请求转发到合适的源服务器上。从浏览器角度看,整个CDN就是一个源服务器,从这个层面来说,浏览器和服务器之间的缓存机制,在这种构造下使用。

(3)代理服务器缓存是浏览器和服务器之间的中间服务器,浏览器先向这个中间服务器发起请求,经过处理后再将请求发送的源服务器。代理服务器缓存的运作原理和浏览器的运作原理差不多,只是规模更大

(4)浏览器实现HTTP缓存,我们通过浏览器使用HTTP协议与服务器交互的时候,浏览器就会根据一套与服务器约定的规则进行缓存工作。

(5)应用层缓存是指我们再大码层面上的缓存,通过代码逻辑把我们请求过的数据或者资源等缓存起来,再次需要数据时通过逻辑上的处理选择可用的缓存数据。

2.为什么需要浏览器缓存?我们需要做些什么?

我们知道HTTP协议,在客户端和浏览器简历连接时需要消耗时间,而大的响应需要再客户端和服务器之间进行多次通信才能获得完整的响应。这延时了浏览器可以使用和处理内容的时间,这就增加了访问服务器的数据和资源的成本,因此利用浏览器的缓存机制重用以前的数据编程了性能优化时必须要考虑的问题

解决办法:为每个资源制定一个明确的缓存策略,定义资源是否可以缓存,由谁来缓存,可以缓存多久,并且在缓存到期时如何有效的重新验证,当服务器返回一个响应时,它需要响应头中提供的cache-Control和Etag.

3.使用etag验证缓存的http响应

  服务器通过ETag HTTP头传递验证码,当浏览器的资源过期后再次请求是,里晒亲戚默认会通过If-None-Match传递Etag验证码,通过验证码可以记性高效的资源更新检测,如果资源未更改,则不会传输任何数据。

  Etag主要是验证响应过期以后资源是否被修改。

  如果浏览器发出的验证码一致,说明资源未被修改过,服务器会返回锁,这样我们就可以跳过下载,利用已经缓存的资源。

4.什么是cache-Control?如何定义cache-Control策略?

服务器响应浏览器请求时响应头中的cache-Control响应头使得每个资源都可以通过cache-Control Http头来定义自己的缓存策略。

no-cache : 表示必须先与服务器确认返回的响应是否被更改,然后才能使用该响应来满足后续对同一个网址的请求。因此,如果存在合适的验证令牌 (ETag),no-cache 会发起往返通信来验证缓存的响应,如果资源未被更改,可以避免下载。
no-store : 禁止缓存任何响应,也就是说每次用户请求资源时,都会向服务器发送一个请求,每次都会下载完整的响应。
public : 如果响应被标记为public,即使有关联的 HTTP 认证,甚至响应状态码无法正常缓存,响应也可以被缓存。
private : 浏览器可以缓存private响应,但是通常只为单个用户缓存,因此,不允许任何代理服务器对其进行缓存 。比如,用户浏览器可以缓存包含用户私人信息的 HTML 网页,但是 CDN 不能缓存。
max-age :  用来设置资源被缓存的最长时间(单位是秒)。

5.已经缓存的响应,如何更新和废弃?

  一般情况下,浏览器发出的所有的HTTP请求会首先被路由到浏览器的缓存,以查看是否缓存了可以用于实现请求的有效响应,如果有匹配的响应,会直接从缓存中读取响应,这样就避免了网络延迟以及传输产生的数据成本,然而,如果我们希望跟新或废弃已缓存的响应,该怎么办?假设我们已经告诉某个css样式缓存长达24小时,但是设计人员刚刚提交了更新,我们希望所有用户都能使用,我们该如何通知所有访问者缓存css副本已经过时。

  实际上以前没有请求过该资源的新的用户会得到更新的资源,但是请求过资源的用户将在过期时间达到之前一直得到旧的被缓存的资源,直到他手动的去清理了浏览器的缓存。手动清理浏览器缓存这种事可能只有程序员才会做,那么我们要怎么做才能让用户得到更新后的资源呢?

时间: 2024-10-29 15:40:19

以浏览器为载体的缓存机制的相关文章

IE浏览器关于ajax的缓存机制

IE浏览器对于同一个URL只返回相同结果.因为,在默认情况下,IE会缓存ajax的请求结果.对于同一个URL地址,在缓存过期之前,只有第一次请求会真正发送到服务端.大多数情况下,我们使用ajax是希望实现局部刷新的,所以这就牵扯到一个改进的问题. 如果想每次都获取到最新数据,我们只需保证每次传入的URL不一样.最简单的方法就是通过给url拼接参数.利用math函数的random()方法生成随机数. 比如访问百度www.baidu.com,我们就可以把地址写成www.baidu.com?t=Mat

9大浏览器端缓存机制分析

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件

Java缓存学习之二:浏览器缓存机制

浏览器端的九种缓存机制介绍 浏览器缓存是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件还是从

九种浏览器端缓存机制知多少(转)

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件

浏览器缓存机制浅析

非HTTP协议定义的缓存机制 浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires: Cache-control等).但是也有非HTTP协议定义的缓存机制,如使用HTML Meta 标签,Web开发者可以在HTML页面的<head>节点中加入<meta>标签,代码如下: <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 上述代码的作用是告诉浏览器当前页面不被缓存,每

浏览器缓存机制

最近在做项目过程中需要对部分文件数据进行缓存,于是整理一些关于浏览器缓存机制的信息 概要总结:1.Expires 过期时间2.Cache-Control 缓存机制 [max-age=300]缓存时间 300 表示5分钟3.Last-Modified 最后修改时间 对应在请求头部有If-Modified-Since4.Etag 唯一标识 由服务器生成 对应在请求头部有If-No-Match优先级:Etag > last-modified > Expires 浏览器缓存机制,其实主要就是HTTP协

浏览器缓存机制(2)-应用缓存

浏览器缓存机制(2)-应用缓存 在公司项目中,一些移动版的WEB页面恰好用到了应用缓存,故顺便写篇文章来总结下应用缓存方面的内容. 1.应用缓存简介 应用缓存(application cache)是HTML5提供的一套缓存机制,使得WEB应用可以离线运行.除了一些旧版本的IE外,现代浏览器如firefox,chrome,safari大部分都是支持HTML5标准的.使用应用缓存主要优势有: 离线浏览:用户可以在离线状态浏览网页内容. 速度更快: 因为数据存储在浏览器缓存中,浏览器只会下载服务器发生

浏览器缓存机制详解

对于浏览器缓存,相信很多开发者对它真的是又爱又恨.一方面极大地提升了用户体验,而另一方面有时会因为读取了缓存而展示了"错误"的东西,而在开发过程中千方百计地想把缓存禁掉.那么浏览器缓存究竟是个什么样的神奇玩意呢? 什么是浏览器缓存: 简单来说,浏览器缓存就是把一个已经请求过的Web资源(如html页面,图片,js,数据等)拷贝一份副本储存在浏览器中.缓存会根据进来的请求保存输出内容的副本.当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是

从php到浏览器的缓存机制,不得不看!

所有的php程序员都知道在php脚本里面执行 echo "1";访客的浏览器里面就会显示"1". 但是我们执行下面的代码的时候,并不是显示"1"之后5秒再显示"2",而是等待5秒后直接显示"12" echo '1'; sleep(5); echo '2'; 这就涉及到几个缓存机制,为了更高的薪水,同学们非常有必要把这个缓存机制学习好. 通常情况下,我们的web应用由以下几个要素构成: php->apa