当前位置:首页 » 文件管理 » http缓存设置

http缓存设置

发布时间: 2022-10-30 09:35:37

1. html怎么设置http头部缓存

用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式;
<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">

用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;

<meta http-equiv="Pragma" contect="no-cache">

2. 北大青鸟java培训:web编程开发都有哪些前端缓存

缓存问题在web前端编程开发领域中是一个非常重要的技术问题,下面我们就一起来了解一下,关于web缓存我们都需要了解哪些知识。
缓存优点通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备。
对于前端开发者来说,浏览器充当了重要角色。
除此外常见的还有各种各样的代理服务器也可以做缓存。
当Web请求到达缓存时,缓存从本地副本中提取这个副本内容而不需要经过服务器。
这带来了以下优点:缓存减少了冗余的数据传输,节省流量缓存缓解了带宽瓶颈问题。
不需要更多的带宽就能更快加载页面缓存缓解了瞬间拥塞,降低了对原始服务器的要求。
缓存降低了距离延时,因为从较远的地方加载页面会更慢一些。
缓存种类缓存可以是单个用户专用的,也可以是多个用户共享的。
专用缓存被称为私有缓存,共享的缓存被称为公有缓存。
私有缓存私有缓存只针对专有用户,所以不需要很大空间,廉价。
Web浏览器中有内建的私有缓存——大多数浏览器都会将常用资源缓存在你的个人电脑的磁盘和内存中。
公有缓存公有缓存是特殊的共享代理服务器,被称为缓存代理服务器或代理缓存(反向代理的一种用途)。
公有缓存会接受来自多个用户的访问,所以通过它能够更好的减少冗余流量。
新鲜度限值HTTP通过缓存将服务器资源的副本保留一段时间,这段时间称为新鲜度限值。
这在一段时间内请求相同资源不会再通过服务器。
HTTP协议中Cache-Control和Expires可以用来设置新鲜度的限值,前者是HTTP1.1中新增的响应头,后者是HTTP1.0中的响应头。
电脑培训http://www.kmbdqn.cn/发现二者所做的事时都是相同的,但由于Cache-Control使用的是相对时间,而Expires可能存在客户端与服务器端时间不一样的问题,所以我们更倾向于选择Cache-Control。

3. BT每个HTTP连接磁盘缓存大小如何设置

这个没有太大的要求了,一般说来软件的默认设置现在已经调到合理范围了。如果你是近两年买的硬盘也不需要担心因为bt下载损伤硬盘,因为现在的硬盘缓存也比较大了。但是老式的硬盘则需要区别对待。一般有个十几M就差不多了吧。

4. 在HTTP报文中增加缓存控制和在html的meta中做缓存控制有什么区别

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletA extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
//servlet页面默认是不缓存的
//本页面允许在浏览器端或缓存服务器中缓存,时限为20秒。
//20秒之内重新进入该页面的话不会进入该servlet的
java.util.Date date = new java.util.Date();
response.setDateHeader("Last-Modified",date.getTime()); //Last-Modified:页面的最后生成时间
response.setDateHeader("Expires",date.getTime()+20000); //Expires:过时期限值
response.setHeader("Cache-Control", "public"); //Cache-Control来控制页面的缓存与否,public:浏览器和缓存服务器都可以缓存页面信息;
response.setHeader("Pragma", "Pragma"); //Pragma:设置页面是否缓存,为Pragma则缓存,no-cache则不缓存

//不允许浏览器端或缓存服务器缓存当前页面信息。
/*response.setHeader( "Pragma", "no-cache" );
response.setDateHeader("Expires", 0);
response.addHeader( "Cache-Control", "no-cache" );//浏览器和缓存服务器都不应该缓存页面信息
response.addHeader( "Cache-Control", "no-store" );//请求和响应的信息都不应该被存储在对方的磁盘系统中;
response.addHeader( "Cache-Control", "must-revalidate" );*///于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时;

System.out.println("进入了servlet");
response.getWriter().write("欢迎光临我的主页");
}

}

5. traffic server 怎么缓存http页面

客户端指示

默认情况下,Traffic Server不缓存含有如下请求头部的对象:

Cache-Control: no-store头部

Cache-Control: no-cache头部

配置Traffic Server忽略Cache-Control: no-cache头部,见Configuring Traffic Server to Ignore Client no-cache Headers。

Cookie: 头部(文本对象)

默认情况下,Traffic Server缓存为包含cookies请求服务的响应对象(除了文本对象)。可以配置Traffic
Server不缓存任何类型的cookies内容、缓存所有的cookies内容或者只缓存图片类型的cookies内容。更多信息见Caching
Cookied Objects。

Authorization: 头部

配置Traffic Server忽略客户端的no-cache头部

默认情况下,Traffic Server严格遵守客户端Cache-Control:
no-cache的指示。如果一个被请求的对象包含no-cache头部,即使它在缓存中仍然有效,Traffic
Server也会将该请求传递给源服务器。可以配置Traffic
Server忽略客户端no-cache指示,这样它将忽略客户端请求的no-cache头部并用缓存中的对象服务该请求。

配置Traffic Server忽略客户端的no-cache头部

1. 在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。

2. 编辑下面的变量:

变量

描述

proxy.config.http.cache.ignore_client_no_cache

设置这个变量为1来忽略客户端请求旁路缓存。

3. 保存并关闭records.config文件

4. 定位到Traffic Server的bin目录

5. 运行traffic_line –x命令来应用配置文件的变更。

源服务器指示

默认情况下,Traffic Server不缓存包含如下响应头部的对象:

Cache-Control: no-store头部

Cache-Control: private头部

WWW-Authenticate: 头部

要配置Traffic Server忽略WWW-Authenticate头部,见Configuring Traffic Server to Ignore WWW-Authenticate Headers。

Set-Cookie: 头部

Cache-Control: no-cache头部

要配置Traffic Server忽略no-cache头部,见Configuring Traffic Server to Ignore Server no-cache Headers。

Expires: 头部包含0值或过去时间

配置Traffic Server忽略服务器no-cache头部

默认情况下,Traffic Server严格遵守Cache-Control:
no-cache指示。一个来自源服务器的带有no-cache头部的响应将不会被存储在缓存,该对象之前在缓存中的拷贝也会被删除。如果配置
Traffic Server忽略no-cache头部,Traffic
Server同时也忽略no-store头部。在大多数情况下是应该遵守no-cache指示的。

配置Traffic Server忽略服务器no-cache头部

1. 在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。

2. 编辑下面的变量:

变量

描述

proxy.config.http.cache.ignore_server_no_cache

设置这个变量为1来忽略服务器旁路缓存。

3. 保存并关闭records.config文件

4. 定位到Traffic Server的bin目录

5. 运行traffic_line –x命令来应用配置文件的变更。

配置Traffic Server忽略WWW-Authenticate头部

默认情况下,Traffic Server不缓存包含WWW-Authenticate响应头部的对象。WWW-Authenticate头部包含着客户端准备用来响应源服务器挑战应答的鉴定参数。

当配置Traffic
Server忽略源服务器的WWW-Authenticate头部,所有带WWW-Authenticate头部的对象将被存储在缓存中被用来服务后来的
请求,在大多数情况下,应该使用默认的不缓存带WWW-Authenticate头部对象的行为。只有在对HTTP
1.1深入理解的基础上,再尝试配置Traffic Server忽略服务器WWW-Authenticate头部。

配置Traffic Server忽略WWW-Authenticate头部

1. 在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。

2. 编辑下面的变量:

变量

描述

proxy.config.http.cache.ignore_authentication

设置这个变量为1来缓存带WWW-Authenticate头部的对象。

3. 保存并关闭records.config文件

4. 定位到Traffic Server的bin目录

5. 运行traffic_line –x命令来应用配置文件的变更。

配置指示

除了客户端和服务器的指示,Traffic Server同样响应配置选项和文件的指示。

可以按如下步骤来配置Traffic Server:

l 不缓存任何对象(见Disabling HTTP Object Caching)。

缓存动态内容 — 对象的URL以.asp结尾或者包含问号(?)、分号(:)或者cgi。更多信息见Caching Dynamic Content。

缓存响应Cookie: 头部的对象(见Caching Cookied Objects)。

遵守cache.config文件中的从不缓存规则(见cache.config)。

关闭HTTP 对象缓存功能

默认情况下,Traffic Server缓存除了在cache.config文件中设置了从不缓存规则的所有对象。可以关闭HTTP 对象缓存功能,所有的对象都直接由源服务器服务而且从不缓存。

手动配置关闭HTTP对象缓存功能:

1. 在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。

2. 编辑下面的变量:

变量

描述

proxy.config.http.cache.http

设置这个变量为0来关闭HTTP对象缓存功能。

3. 保存并关闭records.config文件

4. 定位到Traffic Server的bin目录

5. 运行traffic_line –x命令来应用配置文件的变更。

缓存动态内容

一个以.asp结尾或包含问号(?)、分号(;)或者cgi的URL被认为是动态的。Traffic Server不缓存冬天内容。可以配置Traffic Server缓存动态内容,当然这只推荐在专门的代理情形下使用。

配置Traffic Server缓存动态内容:

1. 在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。

2. 编辑下面的变量:

变量

描述

proxy.config.http.cache_urls_that_look_dynamic

设置这个变量为1来缓存动态内容。

3. 保存并关闭records.config文件

4. 定位到Traffic Server的bin目录

5. 运行traffic_line –x命令来应用配置文件的变更。

缓存Cookied对象

默认情况下,Traffic Server缓存为包含cookies请求服务的响应对象(除了文本对象)。Traffic
Server之所以不缓存文本内容的cookied,是因为对象的头部和对象是一起存储的,而带有隐私的cookie头部是不能和对象一起保存的。对于非
文本对象,不能确定是否使用了带有隐私的cookie头部。

可以配置Traffic Server:

不缓存任何类型的cookies内容。

只缓存图片类型的cookies内容。

缓存所有的cookies内容。

配置Traffic Server缓存cookied内容的方式:

1. 在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。

2. 编辑下面的变量:

变量

描述

proxy.config.http.cache.cache_responses_to_cookies

设置这个变量来指定Traffic Server缓存cookied内容的方式:

0 = 不缓存任何cookies响应。

1 = 缓存所有的cookies响应。

2 = 只缓存图片类型的cookies响应。

3 = 缓存除了文本内容类型的所有cookies响应。

3. 保存并关闭records.config文件

4. 定位到Traffic Server的bin目录

5. 运行traffic_line –x命令来应用配置文件的变更。

6. http缓存之基本概念

1. 重要性

综上所述,所以大家很有必要花时间来研究。

2. 困难之处
个人认为http缓存是比较枯燥的理论知识,尤其对于前端来讲,更多在于理解概念,以及内部缓存机制,而没有什么实践可以巩固,或者说理论和现实脱轨。

浏览器会在请求资源之后,根据自己的缓存策略判断是否对资源进行缓存,当再次请求相同的资源时,浏览器根据缓存策略判断是通过本地缓存获取资源,还是重新向服务器发起请求。

这个 缓存策略 到底是什么呢?
实际每个浏览器的缓存策略是有差异的,但大致受以下几个因素的影响。

搜索关键字 禁止 html 缓存 ,很容易搜到以下答案:

但是,这是 Html 4.0 中的规范,在 Html 5.0 的规范中 http-equiv 已经不存在以上属性值了。
而且代理服务器并不会读取以上meta标签,不利于代理服务器的缓存。

-- 引用自 stackoverflow

综上所述, html meta 是一个不那么可靠,并且已经过时的解决方案,所以不建议再继续使用

基于 HTTP 协议的缓存策略,分为 强缓存 和 协商缓存 , 由 HTTP 协议的首部 (Headers) 信息决定。具体的操作设置需要服务器配合,比如 Nginx 。所以相对来说都是后端在做此类事情,前端接触的机会比较少。

如果开启了强缓存,并且在过期时间之内,则浏览器不再发起请求,直接使用本地的缓存资源。
Expires 和 Cache-control 用于控制强制缓存。

Expires 是 HTTP 1.0 的特性。通过指定一个明确的时间点作为缓存资源的过期时间,客户端会根据此时间点来判断到底使用本地缓存,还是向服务器重新请求资源。

优点: 在缓存过期时间内,减少客户端的 HTTP 请求,不仅节省了客户端处理时间,提高了 web 应用的执行速度,而且减少了服务器负载,以及客户端网络资源的消耗。

缺点:指定的过期时间以服务器为准,但是客户端进行过期时间判断时是将 本地的时间 与 指定的过期时间点 进行对比。如果客户端修改了本地时间,将会影响对缓存的判断。

Cache-control 是HTTP1.1 新增的特性,以便更精准地控制缓存。此首部信息 具有最高的优先级。

max-age 指定的是缓存的时间跨度,而非缓存失效的时间点。优先级比 Expires 高。

如果需要使用协商缓存,需要 将 Cache-control 指定为 no-cache 或者 max-age 、Expires 均过期之后。

协商缓存:浏览器本地是有缓存的,但是要先发起请求,由服务器判断缓存是否过期。

Last-Modified / If-Modified-Since

last-Modified 是 HTTP 1.0 的特性,是服务器端在响应请求时用来说明资源的最后修改时间。

缺点:

Etag / If-None-Match

Etag 是 HTTP 1.1 的特性,是服务器为资源分配的字符串形式唯一性标识,作为响应首部返回给浏览器。

采用弱比较,内容没变化,时间变化了,会认为是资源未变化。

浏览器之HTTP缓存的那些事
304和浏览器http缓存
浏览器缓存机制剖析
浏览器缓存机制介绍
技术研究 vue项目的性能优化之路
HTTP缓存控制小结

7. Okhttp解析(五)缓存的处理

大家好,之前我们讲解了Okhttp网络数据请求相关的内容,这一节我们讲讲数据缓存的处理。本节按以下内容讲解Okhttp缓存相关的内容。

缓存的使用场景很多,通过它可以将数据通过一定的规则存储起来,再次请求数据的时候就可以快速从缓存中读取了,缓存有以下优势。

HTTP本身提供了一套缓存相关的机制。这套机制定义了相关的字段和规则,用来客户端和服务端进行缓存相关的协商,如响应的数据是否需要缓存,缓存有效期,缓存是否有效,服务器端给出指示,而客户端则根据服务端的指示做具体的缓存更新和读取缓存工作。http缓存可以分为两类:

强制缓存,在缓存数据未失效的情况下,可以直接使用缓存数据,有两个字段Expires和Cache-Control用于标明失效规则。

表示过期时间,由服务端返回。那么下次请求数据时,判断这个Expires过期时间是否已经过了,如果还没有到过期时间,则使用缓存,如果过了过期时间,则重新请求服务器的数据。Expires格式如下:

不过因为服务器和客户端的时间并不是同步的,用一个绝对时间作为过期的标记并不是很明智,所以HTTP1.1之后更多的是Cache-Control,它的控制更加灵活。

表示缓存的控制,有服务端返回。它有以下几个取值:

默认情况下是private,也就是不能共享的。Cache-Control格式如下:

对比缓存,表示需要和服务端进行相关信息的对比,由服务器决定是使用缓存还是最新内容,如果服务器判定使用缓存,返回响应吗304,判定使用最新内容,则返回响应码200和最新数据。对比缓存的判定字段有两组:

ETag表示资源的一种标识信息,用于标识某个资源,由服务端返回,优先级更高。格式如下:

然后客户端再次请求时,加入字段If-None-Match,格式如下:

服务端收到请求的该字段时(之前的Etag值),和资源的唯一标识进行对比,如果相同,说明没有改动,则返回状态码304,如果不同,说明资源被改过了,则返回状态码200和整个内容数据。

Last-Modified表示资源的最近修改时间,由服务端返回,优先级更低。格式如下:

Last-Modified
由服务器返回,表示响应的数据最近修改的时间。


If-Modified-Since
由客户端请求,表示询问服务器这个时间是不是上次修改的时间。如果服务端该资源的修改时间小于等于If-Modified-Since指定的时间,说明资源没有改动,返回响应状态码304,可以使用缓存。如果服务端该资源的修改时间大于If-Modified-Since指定的时间,说明资源又有改动了,则返回响应状态码200和最新数据给客户端,客户端使用响应返回的最新数据。

Last-Modified字段的值(服务端返回的资源上次修改时间),常常被用于客户端下次请求时的If-Modified-Since字段中。

HTTP的缓存规则是优先考虑强制缓存,然后考虑对比缓存。

Okhttp缓存相关的类有如下:

要开启使用Okhttp的缓存其实很简单,只需要给OkHttpClient对象设置一个Cache对象即可,创建一个Cache时指定缓存保存的目录和缓存最大的大小即可。

那么下面我们来看看Okhttp缓存执行的大概流程

Okhttp的缓存流程分为读取缓存和存储缓存两个过程,我们分别分析。

读取使用缓存的流程从HttpEngine的sendRequest发送请求开始。

接下来我们分析

从Cache的get方法开始。它按以下步骤进行。

如果存在缓存的话,在指定的缓存目录中,会有两个文件“****.0”和“****.1”,分别存储某个请求缓存的响应头和响应体信息。(“****”是url的md5加密值)对应的ENTRY_METADATA响应头和ENTRY_BODY响应体。缓存的读取其实是由DiskLruCache来读取的,DiskLruCache是支持Lru(最近最少访问)规则的用于磁盘存储的类,对应LruCache内存存储。它在存储的内容超过指定值之后,就会根据最近最少访问的规则,把最近最少访问的数据移除,以达到总大小不超过限制的目的。

接下来我们分析CacheStrategy缓存策略是怎么判定的。

直接看CacheStrategy的get方法。缓存策略是由请求和缓存响应共同决定的。

接来下我们看看CacheControl类里有些什么。

可以发现,它就是用于描述响应的缓存控制信息。

然后我们再看看Okhttp存储缓存是怎么进行的。

存储缓存的流程从HttpEngine的readResponse发送请求开始的。

可以看到这里先通过maybeCache写入了响应头信息,再通过cacheWritingResponse写入了响应体信息。我们再进去看Cache的put方法实现。

我们继续看Cache的writeTo方法,可以看到是写入一些响应头信息。

到这里Okhttp缓存的读取和存储流程我们就清楚了。可以说,缓存的使用策略基本都是按照HTTP的缓存定义来实现的,所以对HTTP缓存相关字段的理解是很重要的。然后关于DiskLruCache是如何管理缓存文件的,这个其实也很好理解,首先的原则就是按照LRU这种最近最少使用删除的原则,当总的大小超过限定大小后,删除最近最少使用的缓存文件,它的LRU算法是使用LinkedHashMap进行维护的,这样来保证,保留的缓存文件都是更常使用的。具体实现大家可以分析DiskLruCache和LinkedHashMap的实现原理。

8. 浏览器缓存机制

有dns的地方,就有缓存。浏览器、操作系统、Local DNS、根域名服务器,它们都会对DNS结果做一定程度的缓存。

DNS查询过程如下:

首先搜索浏览器自身的DNS缓存,如果存在,则域名解析到此完成。
如果浏览器自身的缓存里面没有找到对应的条目,那么会尝试读取操作系统的hosts文件看是否存在对应的映射关系,如果存在,则域名解析到此完成。
如果本地hosts文件不存在映射关系,则查找本地DNS服务器(ISP服务器,或者自己手动设置的DNS服务器),如果存在,域名到此解析完成。
如果本地DNS服务器还没找到的话,它就会向根服务器发出请求,进行递归查询。

浏览器本地缓存失效后,浏览器会向CDN边缘节点发起请求。类似浏览器缓存,CDN边缘节点也存在着一套缓存机制。CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循http标准协议,通过http响应头中的
Cache-control: max-age 的字段来设置CDN边缘节点数据缓存时间。

当浏览器向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向服务器发出回源请求,从服务器拉取最新数据,更新本地缓存,并将最新数据返回给客户端。 CDN服务商一般会提供基于文件后缀、目录多个维度来指定CDN缓存时间,为用户提供更精细化的缓存管理。

CDN 优势
CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低。
大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源服务器的负载。

http请求报文(request)
请求行
请求方法  空格  URL 空格  协议版本 回车符 换行符
请求头(通用信息头、请求头、实体头)
头部字段名 冒号  值  回车键 换行符
...
头部字段名 冒号  值  回车键 换行符
空行
回车符   换行符
实体主体(只有post请求有)
主体

http响应报文(response)
状态行
协议版本  空格  状态码 空格  状态码描述 回车符 换行符
响应头部
头部字段名 冒号  值   回车符 换行符
...
头部字段名 冒号  值   回车符 换行符
空行
回车符   换行符
响应正文
正文

浏览器初次向服务器发起请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存返回的结果,是则将请求结果和缓存标识存入浏览器缓存中

浏览器每次发起请求,都会现在浏览器缓存中查找该请求的结果以及缓存标识
浏览器                浏览器缓存        服务器

——————第一次发起http请求——————>

<——没有该请求的缓存结果和缓存标识————

——————————————发起http请求——————————————>

<——————————返回该请求结果和缓存规则————————————

——将请求结果和缓存标识存入浏览器缓存——>

强制缓存就是向浏览器缓存查找结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程

强制缓存的情况分为三种:
1、不存在该缓存结果和缓存标识,强制缓存失效,直接向服务器发起请求
2、存在该缓存结果和缓存标识,但结果已经失效,强制缓存失效,使用协商缓存
3、存在该缓存结果和缓存标识,且该结果没有失效,强制缓存生效,直接返回该结果

控制强制缓存的字段:Expires,Cache-Control

Expires 是 HTTP/1.0 控制缓存的字段,值为服务器返回该请求的结果缓存时间
即再次发送请求是,客户端时间 小于 Expires的值,直接使用缓存结果

Cache-Control 是HTTP/1.1的规则,主要用于控制网页缓存,主要取值为:
public:所有的内容都缓存(客户端和代理服务器都可以缓存)
private:所有内容只有客户端可以缓存(默认值)
no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
no-store:即不使用强制缓存,也不使用协商缓存
max-age=xxx:缓存内容将在xxx秒后失效

Expires 是一个绝对值
Cache-Control 中 max-age 是相对值,解决了 Expires时期 服务端与客户端 可能出现时间差的问题

注:Expires和Cache-Control同时存在时,只有Cache-Control生效

协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程

协商缓存的两种情况:
1、协商缓存生效,返回304,继续使用缓存
过程:
浏览器                 浏览器缓存     服务器

————————发起http请求————————>

<——该请求的缓存结果失效,只返回缓存标识——

————————携带该资源的缓存标识,发起http请求————————>

<—————————————304,该资源无更新————————————

——————获取该请求的缓存结果——————>

<——————返回该请求的缓存结果——————

2、协商缓存失败,返回200和请求结果
过程:
浏览器                 浏览器缓存     服务器

————————发起http请求————————>

<——该请求的缓存结果失效,只返回缓存标识——

————————携带该资源的缓存标识,发起http请求————————>

<————————200,资源已更新,重新返回请求和结果———————

——将该请求结果和缓存标识存入浏览器缓存中—>

协商缓存的标识也是在响应报文的HTTP头中和请求结果一起返回给浏览器的

控制协商缓存的字段:
(1) Last-Modified/If-Modified-Since:Last-Modified是服务器响应请求是,返回该资源文件在服务器最后被修改的时间;If-Modified-Since再次发起请求时,携带上次返回的Last-Modified的值,服务器将该字段值与该资源最后修改时间对比,决定是否用缓存
(2)Etag/If-None-Match:Etag服务器响应请求时,返回当前资源文件的一个唯一标识,由服务器生成之;If-None-Match是再次发起请求时,携带上次返回的唯一标识Etag的值,服务器收到后,将该字段值与该资源在服务器上的Etag对比,一致 则返回304,否则返回200

注:Etag/If-None-Match优先级高于Last-Modified/If-Modified-Since,同时存在时只有Etag/If-None-Match生效

浏览器缓存分为:内存缓存 和 硬盘缓存

内存缓存特性:
(1)快速读取:内存缓存会将编译解析后的文件,存入该进程的内存中,便于下次运行时快速读取
(2)时效性:一旦关闭进程,进程内存清空

硬盘缓存特性:
永久性:直接写入硬盘文件中
复杂、缓慢:读取缓存对该缓存存放的硬盘文件进行I/O操作,重新解析

from memory cache:使用内存中的缓存

from disk cache:使用硬盘中的缓存

浏览器读取顺序:memory ——> disk

浏览器将js和图片等文件解析执行后直接存入内存缓存中,F5刷新页面时,from memory cache(使用内存中的缓存)
css文件存入硬盘中,F5刷新页面时,from disk cache(使用硬盘中的缓存)

参考文章
https://segmentfault.com/a/1190000017962411
https://www.cnblogs.com/chengxs/p/10396066.html

9. 如何正确设置Web缓存

在网络里传输的每个文件都有mime类型这是http协议里面的,服务器必须正确设置,就是将后缀名不同的文件的mime设置为不同,具体怎么设置可以上网查询。
#号后面的是注释,你随便写删掉也可以,明白么,一般写上时间和版本是为了调试,因为你改了你的程序文件,浏览器还会从缓存里面获取,你必须更改你的manifest文件,浏览器才会更新本地文件,而更改manifest文件的方式你可以自己定义,最好的方法就是设置注释每次更改注释

热点内容
maven3编译jdk6项目 发布:2024-10-07 03:19:57 浏览:43
缓存的视频无法剪辑 发布:2024-10-07 03:19:40 浏览:88
解压工具RAR 发布:2024-10-07 02:42:49 浏览:352
苹果网盘解压 发布:2024-10-07 02:42:49 浏览:159
为什么安卓苹果手游不互通 发布:2024-10-07 02:31:28 浏览:280
如何删除手机中的游戏缓存 发布:2024-10-07 02:11:28 浏览:874
解锁数据库用户 发布:2024-10-07 01:55:54 浏览:828
关系数据库的关键字是指 发布:2024-10-07 01:55:54 浏览:518
java数据库date 发布:2024-10-07 01:55:21 浏览:459
安卓12如何开通运用权限 发布:2024-10-07 01:29:54 浏览:136