Appearance
一次js请求一般情况下有哪些地方会有缓存处理
本节目标:理解“一次js请求一般情况下有哪些地方会有缓存处理”的核心思路,并能把它用于实际开发或面试表达。
说明:原 OneNote 中有图片引用,但图片未包含在导出目录中;本页保留了可用的文字与代码内容。
dns缓存 但如果你在短时间内你多次访问了某网址,DNS都要多次解析并返回给你的话,你们都重复工作了是吧?于是操作系统很聪明地设计了一个本地“DNS缓存”,当你第一次访问163.com,DNS返回了正确的IP之后,系统就会将这个结果临时储存起来,这就是DNS缓存。并且它会为缓存设定一个失效时间(例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑本地的DNS缓存中把结果交还给你,而不必再去询问
DNS服务器,变相“加速”了网址的解析。当然,在超过N小时之后,系统会自动再次去询问
DNS服务器获得新的结果。 所以,当你修改了 DNS 服务器,并且不希望电脑继续使用之前的DNS缓存时,就需要手动去清除本地的缓存了。
cdn缓存 前端缓存分为浏览器缓存和cdn缓存
特别说明:Cache-control: public 表示缓存的版本可以被代理服务器或者其他中间服务器识别(浏览器,cdn都能缓存)。 Cache-control: private 意味着这个文件对不同的用户是不同的。只有用户自己的浏览器能够进行缓存,公共的代理服务器不允许缓存**(只能用户的浏览器缓存)。** Cache-control: no-cache 意味着文件的内容不应当被缓存。这在搜索或者翻页结果中非常有用,因为同样的URL,对应的内容会发生变化。
max-age 标签可以让我们更加容易的处理过期时间。我们只需要说,这份资料你只能用一个星期就可以了。 Max-age 使用秒来计量,如: Cache-Control:max-age=645672 指定页面645672秒(7.47天)后过期。 Last-Modified 服务器为了通知浏览器当前文件的版本,会发送一个上次修改时间的标签,例如: Last-Modified:Tue, 06 Jan 2015 08:26:32 GMT
这样浏览器就知道他收到的这个文件创建时间,在后续的请求中,浏览器会按照下面的规则进行验证: 1. 浏览器:Hey,我需要
jQuery.min.js这个文件,如果是在 Tue, 06 Jan 2015 08:26:32 GMT 之后修改过的,请发给我。 2. 服务器:(检查文件的修改时间
)
3.服务器:Hey,这个文件在那个时间之后没有被修改过,你已经有最新的版本了。4. 浏览器:太好了,那我就显示给用户了。 在这种情况下,服务器仅仅返回了一个304的响应头,减少了响应的数据量,提高了响应的速度。 下图是按F5刷新页面后,页面返回304响应头。可以看到返回304后其他东西都没下载,都是缓存直接获取的
dn缓存就是在浏览器和服务器间增加的一层缓存,缓存一些html、图片、css、xml等静态资源。
无cdn: 用户在浏览网站的时候,浏览器能够在本地保存网站中的图片或者其他文件的副本,这样用户再次访问该网站的时候,浏览器就不用再下载全部的文件,减少了下载量意味着提高了页面加载的速度。 有cdn: 如果中间加上一层CDN,那么用户浏览器与服务器的交互如下: 客户端浏览器先检查是否有本地缓存是否过期,如果过期,则向CDN边缘节点发起请求,CDN边缘节点会检测用户请求数据的缓存是否过期,如果没有过期,则直接响应用户请求,此时一个完成http请求结束;如果数据已经过期,那么CDN还需要向源站发出回源请求(back to the source request),来拉取最新的数据。
1.CDN加速原理 通过动态域名解析,网友的请求被分配到离自己最快的服务器。CDN服务器直接返回缓存文件 或通过专线代理原站的内容。 网络加速+内容缓存,有效提供访问速度
2.CDN缓存什么内容 缓存html、图片、css、xml等静态资源,不缓存含有?的动态地址、jsp、PHP,js文件也不缓存【除非特殊设置】 缓存原站返回HTTP状态为20*或304,不缓存其他状态(例如404,500,503)
4.CDN缓存内容的更新 a)用户首次请求,CDN从原站抓取后缓存,直到文件过期后有用户请求再次更新 b)程序主动通知CDN抓取
5.CDN缓存内容的有效期 a)原站apache吐出的静态文件:由apache的expire和header模块控制 主要两项:last-modified,cache-control:max-age apache缺省配置,所有静态文件在cdn只缓存3600s【需要我们按需求调整被加速服务器的apache设置】 3600s后cdn失效,用户访问时会重新请求原站,如果没有变化,缓存失效周期自动延长10%。 b)原站jsp或php吐出的动态内容(url形式必须是静态的) 由程序控制last-modified,cache-control:max-age public ,apache的设置将不起作用 cdn根据这两项判断是否需要到原站更新内容
浏览器缓存 服务器缓存
