HTTP 缓存

2016/11/01 · 基本功才能 ·
HTTP,
缓存

原稿出处:
坑坑洼洼实验室   

金沙注册送58 1

有时候,HTTP 中的缓存恐怕会分外令人咳嗽。
安分守纪文书档案准确地行使 HTTP 并不是那么难堪,但骨子里,差别的浏览器和 HTTP
版本平日困扰着大家。

通过 Stack Overflow
的寻觅结果,你能够很轻易地意识众五人有同样的麻烦。我们友好或许不必或是未有时间去钻研全体的边缘的场馆。

为此这边有1部分博主计算的实用并速记的平整,并且在以后博主也会到处地跟进和换代。

浏览器缓存调节,浏览器缓存

浏览器缓存调控

Last-Modified/ If-Modified-Since

在浏览器第一遍呼吁某四个UTiguanL时,服务器端的回来状态码200,内容是客户端请求的财富,同时有贰个Last-Modified的质量标识此文件在劳动器端最后被修改的时间。

Last-Modified格式类似那样:Last-Modified : Fri , 12 May 200陆 1八:伍3:3叁地霉素T

客户端首回呼吁此USportageL时,依照HTTP协议的规定,浏览器会向服务器传送If-Modified-Since报头,询问该时间之后文件是不是有被涂改过:

If-Modified-Since : Fri , 12 May 2006 18:53:33 GMT

假设服务器端的能源未有生成,则自动回到 HTTP 30四(Not
Changed.)状态码,内容为空,那样就节省了传输数据量。当服务器端代码发生转移如故重启服务器时,则另行发出财富,再次回到和率先次呼吁类似。从而确认保障不向客户端重复发生产资料源,也准保当服务器有转移时,客户端能够得到最新的财富。

Last-Modified的问题

1、一些文件会被编辑,但内容未有改动,那一年不期望客户端感觉那几个文件被涂改了,而重新获得能源。

二、有些文件修改13分频仍,比方在秒以下的日子内开始展览改动,If-Modified-Since不能够检查到。

三、某个服务器无法确切的得到文件的终极修改时间。

 

Expires

Expires用来支配缓存失效的日子。当浏览器看到响应中有三个Expires头时,它会和对应的机件一同保存到其缓存中,只要组件未有过期,浏览器就会动用缓存版本而不会进展别的的HTTP请求。永世的Expires头适用于图片等格外更新的能源。Expires设置的日子格式必须为红霉素T(格林尼治标准时间)。

Expires:Wed, 11 Jan 2017 08:10:26 GMT

Expires的不足:

第一,Expires头使用的是二个一定的年华,要求客户端和劳务器端的石英钟严峻同步。要是服务器和客户端的命宫不合并,那有一点都不小可能率出现缓存提前失效的意况,存在不稳固性。其次,假诺Expires的日期到来,须求在服务器配置中再提供1个新的日子。

 

Cache-Control

HTTP壹.一引进了Cache-Control头来克制Expires头的不足。Cache-Control使用max-age制定组件被缓存多短时间,以秒为单位。举个例子

Cache-Control:max-age=3600意味着组件将被缓存60分钟。

假定max-age和Expires同时出现,则max-age有越来越高的优先级浏览器缓存调节。,浏览器会凭仗max-age的光阴来承认缓存过期日子。

常用 cache-directive 值

Cache-directive

说明

public

怀有内容都将被缓存(客户端和代理服务器都可缓存)

private

剧情只缓存到村办缓存中(仅客户端可以缓存,代理服务器不可缓存),暗中认可值

no-cache

非得先与服务器确认重临的响应是或不是被改成,然后才干应用该响应来满意三番五次对同三个网站的请求。因而,若是存在万分的求证令牌
(ETag),no-cache
会发起往返通讯来评释缓存的响应,假若财富未被转移,可避防止下载。

no-store

不无剧情都不会被缓存到缓存或 Internet 暂时文件中

must-revalidation/proxy-revalidation

如果缓存的内容失效,请求必须发送到服务器/代理以开始展览双重验证

max-age=xxx (xxx is numeric)

缓存的剧情将要 xxx 秒后失效, 这一个选项只在HTTP
1.1可用
。假使和Last-Modified一同利用时, 优先级较高

 

浏览器的不等操作

展开新窗口

只要内定cache-control的值为private、no-cache、must-revalidate,那么展开新窗口访问时都会再也访问服务器。而只要内定了max-age值,那么在此值内的时刻里就不会再一次访问服务器,比如:Cache-control:
max-age=5 代表当访问此网页后的五秒内不会去重新做客服务器.

在地点栏回车

假诺值为private或must-revalidate,则只有首先次访问时会访问服务器,现在就不再访问。倘诺值为no-cache,那么每一遍都会造访。假若值为max-age,则在逾期事先不会再一次访问。

按后退按扭

借使值为private、must-revalidate、max-age,则不会重访问,而只要为no-cache,则每趟都再次访问.

按刷新按扭

任凭为啥值,都会再也访问.

 

Etag(Entity Tag)

服务器在检查评定缓存的机件是不是和原有服务器上的零件相称时有二种办法:

(一)相比方今修改日期;Last-Modified/If-Modified-since

(一)相比较实体标签;Etag/If-None-Match(优先级比If-Modified-since高)

实体标签,是web服务器和浏览器用于确认缓存组件的有效性的一种体制。

           ETag:”50b1c1d4f775c61:df3″

率先次呼吁时:

一.客户端发起HTTP GET 请求三个能源;

二.服务器管理请求,重回财富,包涵Http Etag和状态码200

其次次呼吁时:

壹.客户端发起 HTTP GET
请求二个文件,请求中回顾多个If-None-Match头,内容正是率先次呼吁时服务器重返的Etag的值

二.服务器决断接受到的Etag和计算出来的Etag是不是相配。若相配,再次来到30四状态码,客户端继续使用本地的缓存。若不相配,重临财富和新的ETag。

ETag带来的难题

ETag经常接纳组件的有些质量来布局它,那几个属性对于特定的过夜了网址服务器来说是绝无仅有的。当浏览器从壹台服务器上收获了原始组件,之后又向其余1台分化的服务器发起条件GET请求时,ETag是不会合作的。

对组件进行不供给的再次加载还会影响服务器的习性并扩展带宽开支。假若您的Round罗布in
Rotation集群中有n台服务器,下3回用户缓存中的Etag能和服务器相配的票房价值是1/n。Etag还会下滑代理缓存的频率,因为代理的与本身的不相配会重新下载。

HTTP响应优化

移除ETag,Expires,使用Cache-Control调节地点缓存。

浏览器缓存调节Last-Modified/ If-Modified-Since
在浏览器第一回呼吁某贰个U途睿欧L时,服务器端的回来状态码200,内容…

浏览器缓存调节

浏览器缓存调节

静态能源

世世代代不会修改的内容:JS 和 CSS
文件,图片,和其余项目标贰进制文件都属于那些类目。

世代,作者真正说的是长久。为静态财富内定版本号是很通用的做法。它们无论什么样时候改换了,它们的
U福特ExplorerL 就改造了。

此间是壹对对准静态能源的大概的条条框框:

  • 在文书大概路径中置放指纹。幸免为指纹使用查询字符串。别的,确定保障生成的U奥迪Q3L长度超越七个不等的字符。
  • 利用这么些 HTTP 头:
Cache-Control: public, max-age=31536000 Expires: (一年后的今天)
ETag: (基于内容生成) Last-Modified: (过去某个时间) Vary:
Accept-Encoding

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f6a212f047787520650-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6a212f047787520650-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f6a212f047787520650-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6a212f047787520650-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f6a212f047787520650-5">
5
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f6a212f047787520650-1" class="crayon-line">
Cache-Control: public, max-age=31536000
</div>
<div id="crayon-5b8f6a212f047787520650-2" class="crayon-line crayon-striped-line">
Expires: (一年后的今天)
</div>
<div id="crayon-5b8f6a212f047787520650-3" class="crayon-line">
ETag: (基于内容生成)
</div>
<div id="crayon-5b8f6a212f047787520650-4" class="crayon-line crayon-striped-line">
Last-Modified: (过去某个时间)
</div>
<div id="crayon-5b8f6a212f047787520650-5" class="crayon-line">
Vary: Accept-Encoding
</div>
</div></td>
</tr>
</tbody>
</table>

针对静态能源的设置正是那么粗略。

Last-Modified/ If-Modified-Since(Validation)

Last-Modified/ If-Modified-Since(Validation)

动态财富

针对应用程序私密性和新鲜度方面必要的不等,我们相应运用差别的缓存调整装置。

对此非私密性和经常性别变化动的财富(想像一下股票(stock)音信),大家相应运用下面那么些:

Cache-Control: public, max-age=0 Expires: (当前时光) ETag:
(基于内容退换) Last-Modified: (过去有些时间) Vary: Accept-Encoding

1
2
3
4
5
Cache-Control: public, max-age=0
Expires: (当前时间)
ETag: (基于内容生成)
Last-Modified: (过去某个时间)
Vary: Accept-Encoding

这么些设置的功能是:那一个能源得以被公开地(通过浏览器和代理服务器)缓存起来。每3次在浏览器采纳这个能源以前,浏览器依然代理服务器会检查那些财富是或不是有更新的版本,假若有,就把它们下载下来。

如此那般的安装必要专注,浏览器在重复检讨能源时效性方面有必然的布帆无恙。规范的是,当用户点击了「重临/前进」开关时,浏览器不会再次检讨那一个能源文件,而是径直利用缓存的本子。你只要要求更严谨的垄断,需求告诉浏览器正是当用户点击了「重临/前进」按键,也亟需重新检讨那一个财富文件,那么能够采纳:

Cache-Control: public, no-cache, no-store

1
Cache-Control: public, no-cache, no-store

不是持有的动态财富都会立马成为过时的能源。假诺它们能够维持至少6分钟的时效,能够应用:

Cache-Control: public, max-age=300

1
Cache-Control: public, max-age=300

经过这样的安装,浏览器只会在四分钟之后才再度检讨。在那前边,缓存的始末会被一直动用。借使在4分钟后,那几个过时的内容需求严格调节,你能够增添
must-revalidate 字段:

Cache-Control: public, max-age=300, must-revalidate

1
Cache-Control: public, max-age=300, must-revalidate

对此私密或许针对用户的剧情,须要把 public 替换为 private
以幸免内容被代理缓存。

Cache-Control: private, …

1
Cache-Control: private, …

在浏览器第2次呼吁某2个UQashqaiL时,服务器端的回到状态码200,内容是客户端请求的财富,同时有三个Last-Modified的本性标志此文件在服务器端最终被改造的年华。

在浏览器第三回呼吁某一个URubiconL时,服务器端的归来状态码200,内容是客户端请求的能源,同时有2个Last-Modified的质量标识此文件在劳务器端最终被涂改的日子。

Cache-Control 和 Expires

当同时接纳 Cache-ControlExpires 时,Cache-Control 得到优先权。

同时选取 Cache-ControlExpires
意味着获得更加宽广的支撑(被差别的浏览器和版本)。当然,它们多少个应该被布署成一样的时效值,以幸免引起疑忌。

参考 Expires: vs. Cache-Control:
max-age

金沙注册送58 2

金沙注册送58 3

ETag 和 Last-Modified

那多少个头在浏览器对能源做重新检核算实的时候会选用到。大约来讲,浏览器只是盲目地蕴藏那多个来源于服务器的头的值,然后在供给检讨注脚的时候,浏览器依照请求条件,把那四个指发送给服务器(分别通过
If-None-MatchIf-Modified-Since)。

留神唯有在能源过期的气象下,检核算实才会发生。

在有规范的呼吁下,If-None-MatchIf-Modified-Since
头的面世取决于服务器。然则,由于是劳务器生成的 ETag 和(或)
Last-Modified,所以实际上,那绝非怎么大主题素材。大大多的浏览器在或许的意况下都会把着四头都发送给服务器。

参考 What takes precedence: the ETag or Last-Modified HTTP
header?

三个家常的建议是:防止采取 ETag。那不是2个总是实惠的建议。ETag
在认清内容是不是真正改造方面包车型地铁确提供了越发正确的支配。针对生成的
ETag,私下认可的Apache方法供给把公文的索引节(inode),大小(size)和终极修改时间作为输入求值得到。那会变成在负载均衡的情况中,生成的
ETag 值变得并非用处,因为各种服务器都会针对同一的文件生成二个两样的
Etag 值。这一个或者正是唯壹的难点导致众五人一起禁止使用
ETag,其实只要正确地针对1个相称的文件生成四个无比的 ETag
值,就从未供给禁止使用 ETag 了。

参考 Should your site be using etags or
not?

客户端第二遍呼吁此UHavalL时,根据HTTP协议的规定,浏览器会向服务器传送If-Modified-Since报头,询问该时间之后文件是或不是有被涂改过:

客户端首回呼吁此U翼虎L时,依据HTTP协议的规定,浏览器会向服务器传送If-Modified-Since报头,询问该时间之后文件是不是有被更换过:

手动按下 Ctrl-奥迪Q5

当按下 Ctrl-R 时,浏览器会指引上面的乞请,以检讨是否须要更新缓存内容:

Cache-Control: max-age=0 If-None-Match: … If-Modifed-Since: …

1
2
3
Cache-Control: max-age=0
If-None-Match: …
If-Modifed-Since: …

注意这并不只是和原服务器建立连接,其同1适用于代理服务器。本质上,它只是再次检讨验证内容。即使服务器回应了四个304,浏览器将会使用缓存的始末。

If-Modified-Since : Fri , 12 May 2006 18:53:33 GMT

If-Modified-Since : Fri , 12 May 2006 18:53:33 GMT

Vary: Accept-Encoding

以此头对于有个别人来讲可能相比面生。

当二个能源启用了 gzip 压缩,并且被代理服务器缓存,客户端要是不援助 gzip
压缩,那么在那样的情景下将会拿走不得法的数码(也正是,压缩过的数额)。这将会使代理服务器缓存五个本子的财富:叁个是减掉过的,3个是没压缩过的。精确版本的能源将要请求头发送之后张开传输。

还有四个切实的来由:IE 浏览器不缓存任何带有 Vary 头但值不为
Accept-EncodingUser-Agent
的能源。所以通过这种方法丰裕这些头,才具保险这个财富在 IE 下被缓存。

正文译自 Bryan Tsai 的 《Http
Caching》。

假若服务器端的财富未有变动,则自动回到 30肆(Not
Changed.)状态码,内容为空,那样就节约了传输数据量。

若果服务器端的能源没有变动,则自动回到 30肆(Not
Changed.)状态码,内容为空,那样就节约了传输数据量。

参考资料

  • Increasing Application Performance with HTTP Cache
    Headers
  • Things Caches Do
  • Google Developers: HTTP
    Caching
  • Google Developers: Optimize
    Caching
  • Caching Tutorial for Web Authors and
    Webmasters
  • Cache Control Directives
    Demystified
  • What are the hard and fast rules for Cache
    Control?
  • What’s the difference between Cache-Control: max-age=0 and
    no-cache?
  • HTTP Cache Control max-age,
    must-revalidate
  • Difference between no-cache and
    must-revalidate
  • Caching Improvements in Internet Explorer
    9

    2 赞 6 收藏
    评论

金沙注册送58 4

金沙注册送58 5

金沙注册送58 6

当服务器端代码产生转移照旧重启服务器时,则再次发出能源,重回和率先次呼吁类似。从而确定保障不向客户端重复发生财富,也保障当服务器有变化时,客户端能够赢得最新的财富。

当服务器端代码发生退换也许重启服务器时,则再一次发出能源,重返和第一遍呼吁类似。从而保障不向客户端重复发生能源,也保障当服务器有浮动时,客户端能够收获最新的财富。

Last-Modified的问题

Last-Modified的问题

一、一些文本会被编辑,但剧情从未改观,这一年不指望客户端以为这么些文件被改动了,而重复赢得能源。

一、一些文本会被编辑,但剧情并未有改观,那年不期待客户端认为这么些文件被更换了,而再次得到能源。

贰、有些文件修改十二分频仍,举例在秒以下的年华内实行改换,If-Modified-Since不能检查到。

二、某个文件修改1二分频仍,比方在秒以下的时间内展开修改,If-Modified-Since不能够检查到。

三、有些服务器无法准确的取得文件的终极修改时间。

3、有些服务器不能够标准的收获文件的结尾修改时间。

 

 

Expires(Freshness)

Expires(Freshness)

Expires用来调整缓存失效的日期。当浏览器看到响应中有三个Expires头时,它会和相应的机件一同保存到其缓存中,只要组件未有过期,浏览器就会选拔缓存版本而不会进展其他的HTTP请求。永恒的Expires头适用于图片等相当更新的财富。Expires设置的日子格式必须为克拉霉素T(Green尼治标准时间)。Expires既适用于
HTTP1.0,也适用于 HTTP一.一。

Expires用来决定缓存失效的日子。当浏览器看到响应中有3个Expires头时,它会和对应的零件一同保存到其缓存中,只要组件没有过期,浏览器就会利用缓存版本而不会进展其余的HTTP请求。长久的Expires头适用于图片等不日常更新的财富。Expires设置的日期格式必须为GMT(格林尼治标准时间)。Expires既适用于
HTTP壹.0,也适用于 HTTP一.一。

Expires:Wed, 11 Jan 2017 08:10:26 GMT

Expires:Wed, 11 Jan 2017 08:10:26 GMT

因为请求根本未有生出,所以在chrome下请求尾部会展现:Provisional
headers are shown。
情形码为 200 OK (from cache)

因为请求根本未曾生出,所以在chrome下请求底部会呈现:Provisional
headers are shown。
气象码为 200 OK (from cache)

Expires的不足:

Expires的不足:

率先,Expires头使用的是3个特定的时刻,要求客户端和服务器端的石英钟严谨同步。倘诺服务器和客户端的时日不合并,那有非常的大可能出现缓存提前失效的场地,存在不牢固性。其次,假若Expires的日子到来,须求在服务器配置中再提供二个新的日子。

首先,Expires头使用的是多个特定的时刻,要求客户端和劳动器端的石英钟严苛同步。假如服务器和客户端的时日不统壹,那有希望出现缓存提前失效的处境,存在不牢固性。其次,若是Expires的日期到来,供给在服务器配置中再提供1个新的日子。

 

 

Cache-Control(Freshness)

Cache-Control(Freshness)

HTTP一.一引进了Cache-Control头来制服Expires头的不足。Cache-Control使用max-age制定组件被缓存多长时间,以秒为单位。比方

HTTP1.一引进了Cache-Control头来克服Expires头的不足。Cache-Control使用max-age制定组件被缓存多长时间,以秒为单位。比方

Cache-Control:max-age=3600代表组件将被缓存60分钟。

Cache-Control:max-age=3600表示组件将被缓存60分钟。

举个例子max-age和Expires同时出现,则max-age有更加高的先期级,浏览器会依据max-age的小运来认同缓存过期时刻。若缓存新鲜,则不发送请求直接行使缓存。

倘使max-age和Expires同时出现,则max-age有越来越高的先期级,浏览器会依附max-age的年华来承认缓存过期岁月。若缓存新鲜,则不发送请求直接选用缓存。

常用 cache-directive 值

常用 cache-directive 值

Cache-directive

Cache-directive

说明

说明

public

public

抱有内容都将被缓存(客户端和代理服务器都可缓存)

全数剧情都将被缓存(客户端和代理服务器都可缓存)

private

private

内容只缓存到村办缓存中(仅客户端能够缓存,代理服务器不可缓存),默许值

内容只缓存到个体缓存中(仅客户端能够缓存,代理服务器不可缓存),暗中认可值

no-cache

no-cache

do-not-serve-from-cache-without-revalidation:能够被缓存,可是在与服务器实行验证在此以前无法供客户端使用。假设存在稳妥的注解确命令牌
(ETag),no-cache
会发起往返通信来证实缓存,借使财富未被转移,可以直接行使。

do-not-serve-from-cache-without-revalidation:能够被缓存,可是在与服务器实行验证从前不能供客户端使用。即使存在伏贴的表明确命令牌
(ETag),no-cache
会发起往返通讯来证实缓存,要是财富未被退换,可以直接使用。

no-store

no-store

全部剧情都不会被缓存到缓存或 Internet 权且文件中

富有内容都不会被缓存到缓存或 Internet 目前文件中

must-revalidation/proxy-revalidation

must-revalidation/proxy-revalidation

只要缓存的内容失效,请求必须发送到服务器/代理以开始展览重新验证

设若缓存的剧情失效,请求必须发送到服务器/代理以拓展再度验证

max-age=xxx (xxx is numeric)

max-age=xxx (xxx is numeric)

缓存内容的有效性时间长短,就要 xxx 秒后失效, 这几个选项只在HTTP
1.1可用
。假设和Last-Modified并存时,
优先级越来越高。值为0时每回都从服务器获取财富。

缓存内容的灵光时间长短,就要 xxx 秒后失效, 这几个选项只在HTTP
1.1可用
。假使和Last-Modified并存时,
优先级越来越高。值为0时每便都从服务器获取财富。

 

 

浏览器的比不上操作

浏览器的例外操作

开垦新窗口

开采新窗口

壹经钦点cache-control的值为private、no-cache、must-revalidate,那么张开新窗口访问时都会再度访问服务器。而一旦钦定了max-age值,那么在此值内的光阴里就不会重新访问服务器,比如:Cache-control:
max-age=5 代表当访问此网页后的5秒内不会去重新走访服务器.

要是钦定cache-control的值为private、no-cache、must-revalidate,那么展开新窗口访问时都会另行访问服务器。而倘若内定了max-age值,那么在此值内的光阴里就不会再度访问服务器,举例:Cache-control:
max-age=伍 表示当访问此网页后的伍秒内不会去重新访问服务器.

在地点栏回车

在地方栏回车

如若值为private或must-revalidate,则只有首先次访问时会访问服务器,未来就不再访问。即使值为no-cache,那么每趟都会造访。如若值为max-age,则在逾期事先不会重新访问。

比方值为private或must-revalidate,则只有首先次访问时会访问服务器,以往就不再访问。如若值为no-cache,那么每趟都会造访。若是值为max-age,则在逾期事先不会再也访问。

按后退按扭

按后退按扭

要是值为private、must-revalidate、max-age,则不会重访问,而只要为no-cache,则每一趟都重复访问.

倘若值为private、must-revalidate、max-age,则不会重访问,而假如为no-cache,则每便都重复访问.

按刷新按扭

按刷新按扭

任由为啥值,都会重复访问.

金沙注册送58 ,无论是为啥值,都会另行访问.

 

 

Etag(Entity Tag)(Validation)

Etag(Entity Tag)(Validation)

服务器在检查测试缓存的机件是还是不是和原始服务器上的机件相称时有二种办法:

服务器在检查评定缓存的机件是还是不是和原来服务器上的机件相配时有两种办法:

(一)比较近来涂改日期;Last-Modified/If-Modified-since

(1)相比较目前修改日期;Last-Modified/If-Modified-since

(一)相比实体标签;Etag/If-None-Match(优先级比If-Modified-since高)

(一)相比实体标签;Etag/If-None-Match(优先级比If-Modified-since高)

实业标签,是web服务器和浏览器用于确认缓存组件的实用的1种体制。

实体标签,是web服务器和浏览器用于确认缓存组件的一蹴而就的①种体制。

           ETag:”50b1c1d4f775c61:df3″

           ETag:”50b1c1d4f775c61:df3″

第一次呼吁时:

首先次呼吁时:

一.客户端发起HTTP GET 请求2个能源;

1.客户端发起HTTP GET 请求1个财富;

二.服务器管理请求,重回能源,包罗Http Etag和状态码200

二.服务器管理请求,重返能源,包含Http Etag和状态码200

其次次呼吁时:

第3回呼吁时:

一.客户端发起 HTTP GET
请求一个文件,请求中包罗2个If-None-Match头,内容正是率先次呼吁时服务器重临的Etag的值

一.客户端发起 HTTP GET
请求贰个文本,请求中总结一个If-None-Match头,内容就是首先次呼吁时服务器重临的Etag的值

二.服务器判定接受到的Etag和总计出来的Etag是不是同盟。若相称,再次回到30四状态码,客户端继续运用本地的缓存。若不包容,重回财富和新的ETag。

二.服务器判别接受到的Etag和计算出来的Etag是否相配。若相配,再次回到30四状态码,客户端继续运用本地的缓存。若不相配,重返财富和新的ETag。

ETag带来的标题

ETag带来的主题素材

ETag常常选择组件的一些性能来组织它,这一个属性对于特定的夜宿了网站服务器来讲是唯一的。当浏览器从1台服务器上获得了原本组件,之后又向此外1台差异的服务器发起条件GET请求时,ETag是不会合营的。

ETag经常接纳组件的少数品质来布局它,那个属性对于特定的下榻了网址服务器来讲是唯一的。当浏览器从1台服务器上收获了土生土长组件,之后又向别的壹台差别的服务器发起条件GET请求时,ETag是不会合作的。

对组件实行不须要的重复加载还会影响服务器的质量并扩大带宽开支。如若您的Round罗布in
Rotation集群中有n台服务器,下叁回用户缓存中的Etag能和服务器相配的可能率是1/n。Etag还会稳中有降代理缓存的功能,因为代理的与自个儿的不相称会重新下载。

对组件实行不供给的再一次加载还会潜移默化服务器的性质并增添带宽费用。要是你的Round罗布in
Rotation集群中有n台服务器,下1遍用户缓存中的Etag能和服务器匹配的概率是1/n。Etag还会减低代理缓存的成效,因为代理的与作者的不相配会重新下载。

HTTP响应优化

HTTP响应优化

目前的Web服务器绝大繁多都应用HTTP/一.1正经,所以移除ETag和Expires,行使Cache-Control调控地点缓存

近日的Web服务器绝大多数都应用HTTP/一.一正式,所以移除ETag和Expires,选拔Cache-Control调整地方缓存

post请求不可能缓存。

post请求无法缓存。

相关文章

网站地图xml地图