`

转——浅谈浏览器缓存

 
阅读更多

 

http://www.360doc.com/content/13/0217/14/11619778_266137568.shtml

  • 为什么使用浏览器缓存
  • 缓存存在的内容
  • 缓存协商
  • 缓存协商的简单演示
  • 缓存相关的header
  • 缓存相关header之间的关系
  • 用户的不同操作
  • 用户不同操作对应浏览器的不同处理方式
  • 测试环境与线上环境取js方式不同导致的问题

 

 

为什么使用本地缓存

对于一些比较少变化的文件,如jscss等,可以在第一次请求之后将这些文件先放在本地,在下次再去请求这些文件的时候就可以不用再去请求,直接使用本地的就可以了,直接消灭请求。这是最好的减少带宽占用、降低服务器压力的方法,同时也可以最大限度的提升页面的显示速度(直接本地取)。

 

查看缓存:

 

ieInternet选项-设置-查看文件


 

Firefox:缓存采用二进制的方式存储,查看可以在地址栏中输入about:cache

 

 

缓存存在的问题

       既然存在了本地,那么最大的问题就是一旦服务器的文件更新了,而浏览器还在使用本地的缓存,会造成服务器端的修改不能生效。

缓存协商

       缓存的文件是由服务器生成,在本地保存,所以对缓存的使用必须要双方配合才能达到最好的效果,这样就引入了缓存协商。

       缓存协商其实就是浏览器在请求某个文件的时候,服务器在返回时会在头部加一些额外的信息,如这个文件在多长时间内可以使用、文件的最后修改时间是什么等等,浏览器在下次再请求这个文件的就会根据之前服务器在头部加入的额外信息来对应的进行一些处理。

 

缓存协商的简单演示

http://levit.china.alibaba.com/guarantee/listBuyerContract/list.htm


注释:左侧的是一个.htm的请求,右侧是一个js的请求

 


注释:在第二次请求的时候.js的请求头信息中多出了红框中的三个值

 

缓存相关的header

Cache-control常用值

  1. public 指示响应数据可以被任何客户端缓存
  2. private 指示响应数据可以被非共享缓存所缓存。这表明响应的数据可以           被发送请求的浏览器缓存,而不能被中介所缓存
  3. no-cache 指示响应数据不能被任何接受响应的客户端所缓存
  4. max-age 数据经过max-age设置的秒数后就会失效,相当于HTTP/1.0中的Expires头。如果在一次响应中同时设置了max-age Expires,那么max-age将具有较高的优先级。

Cache-control

打开一个新页面

在原始窗口中单击 Enter按钮

 F5 键刷新

单击 Back Forward 按钮

public

浏览器呈现来自缓存的页面

浏览器呈现来自缓存的页面

浏览器重新发送请求到服务器

浏览器呈现来自缓存的页面

private

浏览器重新发送请求到服务器

第一次,浏览器重新发送请求到服务器;此后,浏览器呈现来自缓存的页面

浏览器重新发送请求到服务器

浏览器呈现来自缓存的页面

no-cache

浏览器重新发送请求到服务器

浏览器重新发送请求到服务器

浏览器重新发送请求到服务器

浏览器重新发送请求到服务器

max-age=xxx

 xxx 秒后,浏览器重新发送请求到服务器

 xxx 秒后,浏览器重新发送请求到服务器

浏览器重新发送请求到服务器

 xxx 秒后,浏览器重新发送请求到服务器

 

Last-modified:在浏览器第一次请求页面的时候如果返回的header中有这一项的值,则在下次请求的头信息中会加入if-modified-since这个值,服务器端取到这个值后去判断和该文件的最后修改时间是否一样,如果一样,则直接返回304not modified),通知浏览器可以使用本地缓存。


 

E-tag:在浏览器第一次请求页面的时候如果返回的header中有这一项的值,则在下次请求的头信息中会加入if-None-match这个值,服务器端取到这个值后去和这个文件生成的E-tag值进行对比,如果一样,则直接返回304not modified),通知浏览器可以使用本地缓存。Etag默认生成规则是根据文件的inode、文件大小、文件修改时间,可以通过配置选择其中的某几项来生成、

 


 

Expires:过期时间,在这个时间之前,不会再去想服务器发任何请求,直接用本地缓存


缓存相关header的关系

Cache-control会覆盖掉Expires的值,即如果同时存在cache-control:max-age=900expires:******,则以cache-control的值为准

 

Etaglast-modified的值同时存在的时候,last-modified的值失效,仅判断Etag

 

用户的几种不同操作

?       当用户打开一个新的浏览器窗口时的失效操作提高访问速度,提升用户的体验

?       当用户在原始浏览器窗口中单击 Enter 按钮时的失效操作

?       当用户单击 Back  Forward 按钮时的失效操作

?       当用户按 F5 键刷新页面时的失效操作

?       用户按ctrl+F5

不同的操作对应的不同请求

下面截图的情况为firefox中请求http://levit.china.alibaba.com/guarantee/listBuyerContract/list.htm这个网址的结果。

 

 

新打开浏览器窗口:未过期的缓存直接使用本地的,不向服务器发送请求


 

在地址栏单击回车:未过期的缓存直接使用本地的,不向服务器发送请求

(注:在ie中在地址栏单击回车行为与下面的回退一样,全部使用本地缓存,不论过不过期)



 

回退:不论缓存由没有过期,都使用本地缓存。可以看出来比上面少了两个请求,原因是上图中标红的请求的两个文件的缓存都已过期,但在回退时不管是否已过期,直接使用缓存。(浏览器默认对所有的文件都进行缓存,是否使用另说)。剩下的五个请求是因为这几个请求携带的参数都有一个每次都不一样的,导致本地没有与其对应的缓存(例如参数中有系统本地时间)。

 


 

 

F5:所有的文件都会发送请求,有缓存的进行缓存协商,没有修改的返回304使用本地缓存。

 


 

 

Ctrl+F5:所有文件都会发送请求,并且不进行缓存协商(cache-control:no-cache),每个文件重新返回(200


 

 

此次整理的正文到这里就结束了,下面列出的是可能比较多关注的点:

 

1.       Cache-control的值覆盖其他的设置

2.       Etaglast-modified共存的时候以Etag为准

3.       F5刷新的时候不论缓存过不过期都会和服务器进行缓存协商(带上Etaglast-modified之类的信息)

4.       ctrl+F5的时候直接在浏览器单方面决定不使用缓存(直接cache-control:no-cache

5.       在后退的时候除非显式的声明no-cache,否则都会使用缓存(不论是否过期)lfn

分享到:
评论

相关推荐

    浏览器缓存机制介绍与缓存策略剖析.pptx

    浏览器缓存机制介绍与缓存策略剖析 浏览器缓存机制是指浏览器在请求资源时,对已经请求过的资源进行缓存,以便下次请求时可以直接从缓存中获取,从而提高页面加载速度和减少服务器的压力。本文将详细介绍浏览器缓存...

    Loadrunner负载测试 浏览器缓存设置

    在负载测试中,正确配置浏览器缓存能帮助我们更好地模拟真实的用户行为,例如,当用户返回已访问过的页面时,浏览器通常会从缓存中加载资源,而不是重新从服务器请求。 在LoadRunner中,我们可以使用Vuser脚本来...

    HTTP+JS+浏览器缓存技术

    浏览器发送请求 → 浏览器缓存 → 浏览器渲染(如果缓存有效)→ 服务器响应(如果缓存无效) 五、浏览器缓存的应用场景 浏览器缓存可以应用于以下场景: 1. Improve website performance:浏览器缓存可以减少...

    js浏览器缓存.doc

    在进行Web开发的过程中,开发者可能会遇到一个较为隐蔽但十分常见的问题——浏览器缓存导致的重复请求失效现象。特别是使用某些JavaScript库(如Prototype.js)时,如果多次发出相同的GET请求,可能会发现除了首次...

    如何清除浏览器缓存

    "浏览器缓存清除技巧大全" 浏览器缓存的重要性 浏览器缓存是指浏览器在访问网站时,临时存储的一些数据,以便下次访问该网站时可以快速加载。缓存包括 cookies、历史记录、浏览记录、填充表单数据、下载文件等。...

    Android源码——PhotoStore图片浏览器源码.zip

    "Android源码——PhotoStore图片浏览器源码.zip" 提供了一个完整的图片浏览器的实现,它可以帮助开发者深入理解如何在Android系统中高效地展示和管理图片。本文将详细解析该源码中的关键知识点。 首先,我们要了解...

    Microsoft edge 浏览器缓存改成内存虚拟盘(盘符R)

    Microsoft edge 浏览器缓存改成内存虚拟盘(盘符R) Microsoft edge 浏览器缓存改成内存虚拟盘(盘符R) Microsoft edge 浏览器缓存改成内存虚拟盘(盘符R)

    浏览器缓存目录设置

    ### 浏览器缓存目录设置 在日常的网络浏览过程中,浏览器缓存的作用非常重要,它不仅能够提高网页加载速度,还能有效减少硬盘碎片的产生,进而提升整体系统的运行效率。本文将详细介绍如何针对不同浏览器(如Fire...

    浏览器缓存查看及恢复工具

    浏览器缓存是网络浏览的重要组成部分,它帮助用户快速加载先前访问过的网页,通过存储静态资源如图片、JavaScript和CSS文件,减少对服务器的请求。本文将深入探讨浏览器缓存的工作原理,以及如何使用“浏览器缓存...

    Chrome浏览器缓存查看导出工具(支持最新版)

    Chrome浏览器缓存查看导出工具是一款专为用户设计的实用软件,它允许用户方便地查看、管理和导出Chrome浏览器中的缓存数据。这款工具对于开发者、网站管理员以及那些需要全面了解浏览器缓存工作原理的人来说非常有用...

    玩转世界——浅谈游戏用 CPU 的选择.pdf

    Northwood核心通过改进工艺和增大L2缓存,性能得到显著提升。值得注意的是,即使是同核心和相同主频的Pentium 4,前端总线(FSB)的速度也会影响性能,更高的FSB意味着更好的性能表现。 Celeron是Intel针对低端市场...

    jsp去除浏览器缓存

    ### jsp去除浏览器缓存详解 #### 一、引言 在Web开发中,为了提高用户体验及页面加载速度,浏览器通常会缓存一部分资源。但有时为了确保用户获取到最新的内容,我们需要禁止或控制浏览器对特定页面的缓存。本文将...

    Android源码——水果相册浏览器源码.zip

    总的来说,通过对"Android源码——水果相册浏览器源码.zip"的深入研究,开发者可以学习到Android图像处理的最佳实践、UI设计技巧、数据管理策略以及性能优化方法,这些都是构建高质量Android应用不可或缺的基础知识...

    安卓Android源码——PhotoStore图片浏览器源码.zip

    《安卓Android源码——PhotoStore图片浏览器源码分析》 在安卓开发中,理解源码是提升技术深度的重要途径。本篇文章将详细解析名为"PhotoStore"的图片浏览器的源码,通过它来深入理解Android系统中图片显示、管理及...

    三星T231如何清除浏览器缓存-T231清除浏览器缓存教程.docx

    ### 三星T231清除浏览器缓存教程 #### 一、引言 随着移动互联网技术的飞速发展,智能手机已成为人们日常生活中不可或缺的一部分。在众多智能手机品牌中,三星凭借其出色的性能和丰富的功能深受用户喜爱。对于三星T...

    明明白白你的“芯”——浅谈CPU(中).pdf

    《明明白白你的“芯”——浅谈CPU(中)》这篇文章主要探讨了CPU的工作原理和基本构成,其中重点介绍了CPU的三个核心组成部分:控制单元、执行单元和存储单元。 CPU,即中央处理器,是计算机硬件系统的核心,负责执行...

    PHP实例开发源码——玖玩浏览器.zip

    【PHP实例开发源码——玖玩浏览器.zip】这个压缩包文件提供的是一个基于PHP语言的浏览器项目的源代码。PHP是一种广泛使用的开源脚本语言,尤其适用于Web开发,能够嵌入到HTML中,实现动态网页效果。这个项目可能是...

    浏览器缓存读取工具

    浏览器缓存是网络浏览的重要组成部分,它用于存储网页的静态资源,如图片、JavaScript文件、CSS样式表等,以便在用户再次访问同一页面时能够快速加载,提高网页的响应速度和用户体验。`ChromeCacheView`是一款实用的...

    安卓Android源码——水果相册浏览器源码.zip

    这篇文档将深入解析“安卓Android源码——水果相册浏览器源码.zip”这一资源,它是一个专门为Android平台设计的图片浏览应用的源代码。通过分析这个项目,我们可以学习到Android应用开发中的诸多关键知识点,包括...

    提取浏览器缓存中的视频文件

    如果视频被储存在浏览器的缓存文件夹中,这个软件可以帮助你从缓存文件夹中找到该视频文件并保存到其他位置。 它会自动扫描IE、基于Mozilla的网页浏览器(包括FireFox)的整个缓存文件夹,并找出当前储存在里面的所有...

Global site tag (gtag.js) - Google Analytics