当前位置: 首页 > Web前端 > HTML

HTTP缓存分析

时间:2023-04-02 12:12:41 HTML

浏览器会自动缓存访问过的页面。当访问同一个页面请求时,浏览器不再从服务器重新下载页面,而是优先使用本地缓存中的页面。为什么要进行网页缓存从用户的角度来看,网页缓存加快了上网速度。当然,这是用户主观上认为上网速度提高了。在网络上获取的信息是有上限的,限制了用户上网的速度,缓存会造成上网速度加快的假象;2、缓存可以有效减少网络上冗余信息的传输,即如果同一个页面用户每次都刷新,服务器中的页面没有变化。如果用户刷新服务器并发送新的页面,这会造成数据冗余;3、缓存可以有效削弱瞬时拥堵现象;瞬时拥塞可能导致整个网络和服务器崩溃;尽管缓存有各种好处,但缓存不仅仅是在本地存储页面。全部缓存;为了解决这个问题,提出了cachehit的概念(cachehit的概念显然是一个奇葩的产物)。所谓缓存命中是指当一个请求所需要的页面在本地缓存中,检测到缓存的页面,如果服务器没有变化,浏览器就会使用本地缓存的页面(重新检测缓存页面的新鲜度也称为缓存页面的新鲜度,当浏览器发现本地缓存中有需要的页面时,为了判断该页面是否为最新页面,浏览器会向服务器发送请求询问页面是否是最新的,最新的依据是页面的最后修改时间,如果服务器发现页面是最新的,就会返回一个响应,如果缓存服务器单独将缓存存放在一个服务器中,就形成了一个缓存服务器,缓存服务器的拓扑结构多种多样,比如层次结构、网络结构和对等结构等,但是缓存服务器的处理流程基本相同:新鲜度页面可能会随着时间的推移而不断变化,那么如何保证页面始终是最新的呢?http协议提供文档过期时间和服务器重新生效;文件过期时间:cacahe-control:maxAge/文件的相对过期时间Expire:/文件的相对过期时间优于绝对过期时间,因为绝对过期时间依赖于计算机时钟的本地设置;文档过期服务器重新认证,但不代表文档在服务器端发生了变化,所以这时候浏览器需要向服务器重新认证,注意当服务器挂了掉线,并且缓存需要校验,缓存会返回错误信息;条件验证Http允许缓存向原始服务器发送一个条件get,将新鲜度检测和对象获取结合到一个get请求中,只有当文档与缓存文档不一致时,请求服务器才会返回一个新文档If-Modified-since:如果文档自指定日期起被修改,则执行请求方法,可与last-Modified服务器响应头结合使用,仅当内容被修改且与缓存不同时才获取内容版本。If-None-Math:服务器可以提供特殊的标签,而不是将它们与最近的修改日期匹配。这些标签就像序列号。如果缓存的标签和服务器的标签不同,则执行请求返回新内容的方法。缓存设置cache-control:no-store表示缓存中不再缓存文档。cache-control:no-cache表示文档可以缓存在本地,但无论文档是否过期,在新鲜度检查之前都不得返回给浏览器;cache-control:maxage表示文档的最长缓存时间expire:表示文档的过期时间cache-control:must-revaildate表示文档过期后,必须检查新鲜度才能返回给浏览器探测过期算法:如果没有设置cache-control,并且文档有缓存线索,即最后修改日期,浏览器可以运行探测算法计算出一个大概的日期,其中LM-Factor算法如下:newexpirationdate=server_date+(server_date-last_modified_time)*factorserver_date:cache和serverSessiontimefactor:advertisersleeping比率1.缓存清除2.缓存日志3.命中数