`

HTTP请求中浏览器缓存

 
阅读更多
本文导读:浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制。客户端缓存是否需要是可以在服务端代码上控制的。那就是响应头。响应头告诉缓存器不要保留缓存,缓存器就不会缓存相应内容;如果请求信息是需要认证或者安全加密的,相应内容也不会被缓存。那么,HTTP请求中浏览器是如何缓存数据呢?

 

一、HTTP请求中浏览器缓存流程图

 

1、浏览器第一次请求

 

2、浏览器再次请求时

 

 

二、HTTP请求中浏览器缓存流程的文字描述

 

1、当资源第一次被访问的时候,HTTP头部如下

 


(Request-Line)  GET /a.html HTTP/1.1
Host    127.0.0.1
User-Agent  Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
Accept             text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language     zh-cn,zh;q=0.5
Accept-Encoding     gzip,deflate
Accept-Charset      gb2312,utf-8;q=0.7,;q=0.7
Keep-Alive          300
Connection          keep-alive

HTTP返回头部如下

 


(Status-Line)       HTTP/1.1 200 OK
Date                Thu, 26 Nov 2009 13:50:54 GMT
Server              Apache/2.2.11 (Unix) PHP/5.2.9
Last-Modified       Thu, 26 Nov 2009 13:50:19 GMT
Etag                "8fb8b-14-4794674acdcc0"
Accept-Ranges       bytes
Content-Length      20
Keep-Alive          timeout=5, max=100
Connection          Keep-Alive
Content-Type        text/html

 

当资源第一次被访问的时候,http返回200的状态码,并在头部携带上当前资源的一些描述信息,如

 

Last-Modified      // 指示最后修改的时
Etag                // 指示资源的状态唯一标识
  Expires             // 指示资源在浏览器缓存中的过期时间

 

接着浏览器会将文件缓存到Cache目录下,并同时保存文件的上述信息

 

2、当第二次请求该文件时

浏览器会先检查Cache目录下是否含有该文件,如果有,并且还没到Expires设置的时间,即文件还没有过期,那么此时浏览器将直接从Cache目录中读取文件,而不再发送请求

如果文件此时已经过期,则浏览器会发送一次HTTP请求到WebServer,并在头部携带上当前文件的如下信息

 

If-Modified-Since   Thu, 26 Nov 2009 13:50:19 GMT
If-None-Match       "8fb8b-14-4794674acdcc0"

即把上一次修改的时间,以及上一次请求返回的Etag值一起发送给服务器。服务器在接收到这个请求的时候,先解析Header里头的信息,然后校验该头部信息。

如果该文件从上次时间到现在都没有过修改或者Etag信息没有变化,则服务端将直接返回一个304的状态,而不再返回文件资源,状态头部如下


(Status-Line)       HTTP/1.1 304 Not Modified
Date                Thu, 26 Nov 2009 14:09:07 GMT
Server              Apache/2.2.11 (Unix) PHP/5.2.9
Connection          Keep-Alive
Keep-Alive          timeout=5, max=100
Etag                "8fb8b-14-4794674acdcc0"

这样,就能够很大程度上减少网络带宽以及提升用户的浏览器体验。

当然,如果服务器经过匹配发现文件修改过了,就会将文件资源返回,并带上新文件状态信息。

 

三、浏览器缓存行为还有用户的行为有关!

 

用户操作

Expires/Cache-Control

Last-Modified/Etag

地址栏回车

有效

有效

页面链接跳转

有效

有效

新开窗口

有效

有效

前进、后退

有效

有效

F5刷新

无效

有效

Ctrl+F5刷新

无效

无效

 

分享到:
评论

相关推荐

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

    在所有浏览器缓存中,Disk Cache 的覆盖面基本是最大的。浏览器会根据文件的大小和当前系统的内存使用率来决定是否将文件存储到磁盘中。大文件通常不存储在内存中,而是直接存储到磁盘中。 HTTP Cache HTTP Cache ...

    HTTP+JS+浏览器缓存技术

    浏览器缓存是指浏览器在本地磁盘上存储的静态资源文件,包括HTML、CSS、JavaScript、图片等,以便下一次请求时可以直接从缓存中读取,从而提高网站性能和浏览器速度。浏览器缓存机制可以分为两大类:Expires 策略和 ...

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

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

    浏览器HTTP缓存机制

    如果资源未更改,则服务器返回304 Not Modified状态码,表明可以使用缓存中的版本。 #### 五、用户行为的影响 - **按 Enter 键**: 此时浏览器默认检查`Expires` 或 `Cache-Control` 字段,如果没有过期,则直接...

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

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

    jsp去除浏览器缓存

    在JSP页面中可以通过设置HTTP响应头来实现去除浏览器缓存的目的。下面介绍几种常见的方法: ##### 1. 使用JSP内置对象`response` 在JSP页面中可以直接通过`response`对象来设置HTTP响应头,从而实现去除缓存的目标...

    消除浏览器的301重定向缓存

    打开一个新的TAB页,再次请求上面的网址,可以看到浏览器重定向到http://www.baidu.com,同时控制台没有输出,则此时301请求被浏览器缓存。关闭IE10或IE11,再重新打开,浏览器输入上面的网址,可以看到浏览器重定向...

    浅谈Ajax请求与浏览器缓存

    Cache-Control是一个用于在HTTP请求和响应中通过指定指令来控制缓存行为的字段。它可以指定各种缓存指令,其中一些常用的指令包括: - public:表明响应可以被任何缓存区缓存。 - private:表明响应只能被单个用户的...

    浏览器HTTP缓存运行机制流程图.zip

    同时,Service Worker技术也是现代浏览器缓存的重要组成部分,它允许开发者更精细地控制离线缓存和预加载策略。 理解并合理利用这些机制,可以有效地减少网络传输,提升用户体验。例如,设置合适的缓存策略可以减少...

    web项目页面缓存清除,不用每次刷新浏览器

    例如,设置Cache-Control为`no-cache`或`no-store`可以防止浏览器缓存页面,`must-revalidate`则要求每次请求都验证资源是否更新。 2. **HTML5的Service Worker**:Service Worker是一种在浏览器后台运行的脚本,它...

    禁止浏览器缓存当前文档内容

    在网页开发中,浏览器缓存机制是为了优化加载速度,但是有时会导致问题,比如服务器端更新的内容无法及时反映到客户端。为了防止这种情况,可以通过设置HTTP响应头来禁止浏览器缓存当前页面。以下是三种常用的响应头...

    浏览器缓存策略Httpwatch

    浏览器缓存策略是HTTP协议中的一种机制,旨在提高网页加载速度和降低服务器负载。通过缓存,浏览器可以在用户再次访问同一网页时,直接从本地存储中读取之前下载的资源,而不是每次都向服务器请求。Httpwatch是一款...

    浏览器缓存相关知识.zip

    Expires是一个较老的强缓存管理header,它包含一个GMT格式的绝对时间字符串,告诉浏览器在这个时间之前可以直接从浏览器缓存中加载资源,而无需去服务器校验。然而,Expires存在一个潜在的问题,那就是它依赖于...

    浏览器缓存机制 mindMaster脑图与visio流程图

    当强缓存失败,即资源过期或者不存在于缓存中时,浏览器会向服务器发送一个条件请求,携带ETag或Last-Modified信息。服务器根据这些信息判断资源是否改变,如果没有变化,会返回304 Not Modified状态码,浏览器则...

    清除浏览器缓存

    在现代互联网应用中,浏览器缓存机制被广泛采用以提升用户体验和减少网络流量消耗。然而,在某些情况下(如开发测试阶段或网站更新后),我们需要清除浏览器缓存来确保用户能够看到最新的网页内容。本文将详细介绍...

    一款chrome浏览器插件能够让所有请求无缓存

    标题中的“一款chrome浏览器插件能够让所有请求无缓存”是指的是一款专为开发者设计的Chrome浏览器扩展程序,它的主要功能是确保所有的网络请求都不会被浏览器缓存。在Web开发和调试过程中,缓存可能会导致旧的数据...

    【ASP.NET编程知识】ASP.NET MVC中使用jQuery时的浏览器缓存问题详解.docx

    如果要使用同一个地址获取不同的数据,那么就需要使用HTTP POST请求,这样可以避免浏览器缓存的问题。 jQuery库提供了一些选项来支持缓存和Conditional GETs功能。例如,$.ajax方法提供了ifModified和cache选项来...

    浏览器缓存问题5个.docx

    **问题描述**:当浏览器缓存中的资源因损坏或服务器端更新后格式不兼容时,可能会导致页面加载失败或表现异常。 **原因分析**:这种情况通常发生在服务器端对资源进行了更新或删除,而客户端仍然保留着旧版本的缓存...

    js清除浏览器缓存的几种方法

    具体做法是在AJAX请求中设置HTTP请求头If-Modified-Since和Cache-Control的值为"no-cache"。另一种方法是通过AJAX的配置项cache设置为false,以及ifModified设置为true,这样AJAX请求将不会被浏览器缓存。 4. 应用...

    infrared-remote-浏览器缓存demo

    浏览器缓存是网络资源管理的重要组成部分,它在提高网页加载速度和降低服务器负载方面起着至关重要的作用。红外遥控(infrared remote)可能是指一种利用红外技术进行远程控制的应用,通常用于电视、空调等家用电器...

Global site tag (gtag.js) - Google Analytics