【亚洲必赢官网】浏览器缓存,缓存机制壹二叁

HTTP 缓存机制一二三

2017/10/18 · HTML5 · 4
评论 ·
缓存

原著出处: 阿咩   

亚洲必赢官网 1Web
缓存大概能够分成:数据库缓存、服务器端缓存(代理服务器缓存、CDN
缓存)、浏览器缓存。

浏览器缓存也含有众多内容: HTTP 缓存、indexDB、cookie、localstorage
等等。那里大家只谈谈 HTTP 缓存相关内容。

在切实通晓 HTTP 缓存在此以前先来深入人心多少个术语:

  • 缓存命中率:从缓存中赚取数码的伸手数与具备请求数的比率。理想图景是越高越好。
  • 逾期内容:超过设置的卓有成效时间,被标志为“陈旧”的内容。平时过期内容不可能用于恢复生机客户端的呼吁,必须重新向源服务器请求新的始末照旧表明缓存的内容是不是照旧希图。
  • 证实:验证缓存中的过期内容是或不是依然有效,验证通过的话刷新过期时间。
  • 失效:失效正是把内容从缓存中移除。当内容爆发转移时就务须移除失效的始末。

浏览器缓存首若是 HTTP 协议定义的缓存机制。HTML meta 标签,比方

JavaScript

<META HTTP-EQUIV=”Pragma” CONTENT=”no-store”>

1
<META HTTP-EQUIV="Pragma" CONTENT="no-store">

意思是让浏览器不缓存当前页面。可是代理服务器不解析 HTML
内容,一般选取普遍的是用 HTTP 头新闻调节缓存。

强缓存

Web缓存分为许多种,举例数据库缓存,代理服务器缓存,还有我们熟习的CDN缓存,以及浏览器缓存。

浏览器缓存调整,浏览器缓存

浏览器缓存调节

Last-Modified/ If-Modified-Since

在浏览器第三回呼吁某2个U锐界L时,服务器端的回到状态码200,内容是客户端请求的资源,同时有五个Last-Modified的性格标识此文件在服务器端最终被退换的刻钟。

Last-Modified格式类似那样:Last-Modified : Fri , 1二 May 200陆 1八:5三:3三克林霉素T

【亚洲必赢官网】浏览器缓存,缓存机制壹二叁。客户端第三遍呼吁此U路虎极光L时,依据HTTP协议的规定,浏览器会向服务器传送If-Modified-Since报头,询问该时间以后文件是不是有被修改过:

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

设若服务器端的能源没有转换,则自动回到 HTTP 30四(Not
Changed.)状态码,内容为空,那样就省去了传输数据量。当服务器端代码发生变动或然重启服务器时,则重复发出财富,重临和第三遍呼吁类似。从而保障不向客户端重复产生产资料源,也准保当服务器有变动时,客户端能够获得最新的财富。

Last-Modified的问题

一、一些文件会被编辑,但内容尚未改造,这一年不期待客户端感到那个文件被修改了,而再一次取得能源。

二、有些文件修改十三分频仍,比方在秒以下的时日内进行修改,If-Modified-Since不能够检查到。

3、有些服务器无法纯粹的拿走文件的尾声修改时间。

 

Expires

Expires用来决定缓存失效的日期。当浏览器看到响应中有三个Expires头时,它会和呼应的零部件一齐保存到其缓存中,只要组件未有过期,浏览器就会使用缓存版本而不会开始展览任何的HTTP请求。永远的Expires头适用于图片等不日常更新的能源。Expires设置的日子格式必须为威斯他霉素T(格林尼治标准时间)。

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

Expires的不足:

先是,Expires头使用的是三个一定的日子,须要客户端和劳务器端的石英钟严酷同步。借使服务器和客户端的时光不合并,这有望出现缓存提前失效的状态,存在不牢固性。其次,假诺Expires的日子到来,须要在服务器配置中再提供贰个新的日期。

 

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=伍 代表当访问此网页后的伍秒内不会去重新访问服务器.

在地点栏回车

设若值为private或must-revalidate,则唯有首先次访问时会访问服务器,未来就不再访问。如若值为no-cache,那么每一回都会造访。借使值为max-age,则在逾期事先不会再度访问。

按后退按扭

一旦值为private、must-revalidate、max-age,则不会重访问,而1旦为no-cache,则每趟都再也访问.

按刷新按扭

甭管为什么值,都会再一次访问.

 

Etag(Entity Tag)

服务器在检查实验缓存的零部件是还是不是和原有服务器上的机件匹配时有二种方法:

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

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

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

           ETag:”50b1c1d4f775c61:df3″

第2次呼吁时:

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

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

第三回呼吁时:

一.客户端发起 HTTP GET
请求1个文本,请求中包蕴3个If-None-Match头,内容正是首先次呼吁时服务器再次来到的Etag的值

二.服务器决断接受到的Etag和计算出来的Etag是还是不是相称。若相配,重返304状态码,客户端继续采取本地的缓存。若不相配,重返能源和新的ETag。

ETag带来的难题

ETag平日使用组件的一点品质来组织它,那几个属性对于特定的留宿了网站服务器来讲是绝无仅有的。当浏览器从壹台服务器上获得了本来组件,之后又向此外一台不一致的服务器发起条件GET请求时,ETag是不会协作的。

对组件实行不供给的再次加载还会影响服务器的习性并增添带宽开支。就算您的RoundRobin
Rotation集群中有n台服务器,下壹遍用户缓存中的Etag能和服务器相称的概率是1/n。Etag还会下滑代理缓存的频率,因为代理的与自己的不相配会重新下载。

HTTP响应优化

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

浏览器缓存控制Last-Modified/ If-Modified-Since
在浏览器首回呼吁某一个U卡宴L时,服务器端的回来状态码200,内容…

HTTP 头音讯调节缓存

约略分成三种:强缓存和协商缓存。强缓存假诺命中缓存不须要和劳务器端发生互相,而协商缓存不管是否命中都要和劳动器端爆发相互,强制缓存的优先级高于协商缓存。具体内容下文介绍。

相配流程(已有缓存的状态下):

亚洲必赢官网 2

能够知道为无须验证的缓存计策。对强缓存来说,响应头中有多个字段
Expires/Cache-Control 来申明规则。

缓存的首要不用多说了呢,比方chrome会把缓存的文本保留在二个叫User
Data的文本夹下,下次页面加载同样能源时,能够直接从地面读取,不必经过HTTP从劳动器端再度下载能源,大大加快了页面包车型客车响应速度。

强缓存

能够通晓为无须验证的缓存计策。对强缓存来说,响应头中有四个字段
Expires/Cache-Control 来表明规则。

Expires

Expires
指缓存过期的年月,超越了那么些日子点就意味着能源过期。有三个难点是由于应用具体时间,若是时间表示出错也许尚未改动来科学的时区都恐怕导致缓存生命周期出错。并且
Expires 是 HTTP/1.0 的专门的学问,未来更倾向于用 HTTP/一.一 中定义的
Cache-Control。两个同时设有时也是 Cache-Control 的事先级越来越高。

Cache-Control

Cache-Control 能够由多个字段组合而成,主要有以下几个取值:

  1. max-age
    钦命2个年华长短,在这一个日子段内缓存是行得通的,单位是s。比如设置
    Cache-Control:max-age=3153伍仟,也正是说缓存有效期为(3153陆仟 / 二4 / 60
    * 60)天,第二回访问那些财富的时候,服务器端也回到了 Expires
    字段,并且过期时间是一年后。

亚洲必赢官网 3

在未有禁止使用缓存并且未有超越有效时间的事态下,再一次访问这些财富就命中了缓存,不会向服务器请求财富而是平素从浏览器缓存中取。

亚洲必赢官网 4

  1. s-maxage 同 max-age,覆盖
    max-age、Expires,但仅适用于共享缓存,在个体缓存中被忽视。

  2. public
    注脚响应得以被其余对象(发送请求的客户端、代理服务器等等)缓存。

  3. private
    注解响应只好被单个用户(大概是操作系统用户、浏览器用户)缓存,是非共享的,不可能被代理服务器缓存。

  4. no-cache
    强制全数缓存了该响应的用户,在运用已缓存的数量前,发送带验证器的哀求到服务器。不是字面意思上的不缓存。

  5. no-store 禁止缓存,每回请求都要向服务珍视新获取数据。

Expires

本篇首要介绍一下浏览器缓存:

商量缓存

缓存的财富到期了,并不表示财富内容发生了更动,假诺和服务器上的能源没不相同,实际上完全没须求再一次伸手。客户端和劳务器端通过某种验证机制验证当前伏乞财富是还是不是足以行使缓存。

浏览器第壹回呼吁数据之后会将数据和响应底部的缓存标志存款和储蓄起来。再度恳请时会带上存款和储蓄的尾部字段,服务器端验证是或不是可用。假诺回去
30四 Not
Modified,代表财富未有生出转移能够使用缓存的数量,获取新的过期时间。反之重临200 就一定于再度请求了一次能源并替换旧财富。

Last-modified/If-Modified-Since

Last-modified:
服务器端财富的末梢修改时间,响应尾部会带上那么些标记。首次呼吁之后,浏览器记录那个小时,再度请求时,请求尾部带上
If-Modified-Since 即为以前记录下的岁月。服务器端收到带 If-Modified-Since
的央浼后会去和能源的终极修改时间相比较。若修改过就赶回最新能源,状态码
200,若未有改变过则赶回 30肆。

亚洲必赢官网 5

注意:假诺响应头中有 Last-modified 而从不 Expire 或 Cache-Control
时,浏览器会有谈得来的算法来推算出四个年华缓存该公文多长时间,不一致浏览器得出的时辰不雷同,所以
Last-modified 要记得同盟 Expires/Cache-Control 使用。

Etag/If-None-Match

由服务器端上生成的壹段 hash 字符串,第二遍呼吁时响应头带上 ETag:
abcd,之后的央求中带上 If-None-Match: abcd,服务器检查 ETag,再次回到 30肆 或
200。

亚洲必赢官网 6

至于 last-modified 和 Etag 差别,已经有许多少人计算过了:

  • 少数服务器不可能正确获得能源的末段修改时间,那样就不大概透过最后修改时间决断能源是不是更新。
  • Last-modified 只可以正确到秒。
  • 有的能源的最终修改时间更换了,然则内容没改动,使用 Last-modified
    看不出内容未有改变。
  • Etag 的精度比 Last-modified
    高,属于强验证,需要能源字节级别的一模一样,优先级高。倘诺服务器端有提供
    ETag 的话,必须先对 ETag 进行 Conditional Request。

注意:实际选择 ETag/Last-modified
要小心保持一致性,做负载均衡和反向代理的话大概会出现不一致样的情景。总括ETag 也是要求占用能源的,借使改变不是过度频仍,看本身的要求用
Cache-Control 是还是不是足以知足。

选择 Cache-Control 的策略(摘自 Google Developers)

亚洲必赢官网 7

Expires
指缓存过期的日子,超过了这一个日子点就意味着财富过期。有四个难点是由于使用具体时间,借使时间代表出错或许尚未更动来科学的时区都恐怕形成缓存生命周期出错。并且
Expires 是 HTTP/1.0 的正儿捌经,以后更赞成于用 HTTP/一.一 中定义的
Cache-Control。多个同时设有时也是 Cache-Control 的先期级更加高。

  • HTTP Rresponse Header
  • Cache-Control
  • Expires
  • Last-modified
  • ETag
  • 实时更新缓存
  • 缓存战术

实则应用

归来实际选取上来,首先要显明如何内容符合被缓存哪些不相符。

思量缓存的剧情:

  • css样式文件
  • js文件
  • logo、图标
  • html文件
  • 能够下载的剧情

有的不该被缓存的剧情:

  • 业务敏感的 GET 请求

可缓存的始末又分为三种不相同的情景:

失常改变的文件:

给 max-age 设置3个十分大的值,一般设置 max-age=3153四千

譬如引进的局地第一方文件、打包出来的蕴藏 hash 后缀 css、js
文件。一般的话文件内容改变了,会更新版本号、hash
值,相当于请求另3个文书。

行业内部中鲜明 max-age 的值最大不抢先一年,所以设成
max-age=31536000。至于过期内容,缓存区会将一段时间未有行使的文本删除掉。

有探望用对话的样式来讲述那个历程,便效仿着计划更清楚地解释:

亚洲必赢官网 8亚洲必赢官网 9

或许时时索要退换的文本:

Cache-Control: no-cache / max-age=0

举例说入口 index.html 文件、文件内容更换但名称不改变的能源。选用 ETag 或
Last-Modified
来做验证,在使用缓存能源从前一定会去服务器端做验证,命中缓存时会比第3种状态慢一丝丝,究竟还要发请求实行通讯。

亚洲必赢官网 10亚洲必赢官网 11

注意: 那里只描述了最基本的笔触,实际使用 HTTP
缓存必要后端协作配置,具体景况具体相比较,而且各方的落到实处并不一定完全根据标准来的,踩踩坑更符合规律。

参考小说

https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=zh-cn\#publicprivate

https://jakearchibald.com/2016/caching-best-practices

https://zhuanlan.zhihu.com/p/28113197

https://www.digitalocean.com/community/tutorials/web-caching-basics-terminology-http-headers-and-caching-strategies

https://stackoverflow.com/questions/12908766/what-is-cache-control-private

http://www.alloyteam.com/2016/03/discussion-on-web-caching/\#prettyPhoto

4 赞 12 收藏 4
评论

亚洲必赢官网 12

Cache-Control

Cache-Control

Cache-Control用于定义资源的缓存计策。能够钦赐no-storeno-cachepublicprivatemax-gaes-maxage

no-store相对禁止缓存,每一趟请求财富都要从服务重视新获得。常见于含有隐衷数据或银行多少等地方。

no-cache代表不管max-age过可是期,每便都要向服务珍视新验证能源是还是不是被改换。只有服务器端确认能源未被退换后(如前面会介绍的Last-modified或ETag),技艺运用本地缓存。

public(暗许正是public)允许代理服务器缓存财富,以供多用户间共享。

private不容许代理服务器缓存该能源,用户间不共享,如HTTP认证响应会自动设为private

max-age缓存最大使得时间。单位是秒,从被呼吁时先导计时,这样能够幸免机械钟同步难题。因为本来用于缓存的Expires须求服务器和客户端石英钟严刻同步,因而HTTP
一.1引进了cache-control:
max-age来制止石英钟同步的限定。因而当cache-control:
max-age和Expires同时出现,Expires将被忽视。

s-maxage只适用于共享缓存如CDN缓存。

如图服务器端收到请求后,在HTTP 陆风X8response Header里将cache-control:
max-age=120,表示该能源的得力时间为贰分钟。二分钟内客户端如需重新利用该财富,能够直接从本地读取,不供给再行向服务器发出请求了。

Cache-Control的判别流程图:

Cache-Control 能够由五个字段组合而成,首要有以下多少个取值:

Expires

在HTTP壹.一引进Cache-Control从前,用Expires设置缓存过期时间,告诉浏览器在逾期岁月前浏览器能够直接从地面读取能源,不必再次向服务器请求。

但HTTP壹.一现在用Cache-Control代替了Expires,假使为了包容性cache-control:
max-age和Expires同时出现,Expires将被忽视

1.max-age钦点二个岁月长度,在那么些时刻段内缓存是有效的,单位是s。在并未有禁止使用缓存并且未有当先有效时间的情事下,再度访问这几个能源就命中了缓存,不会向服务器请求财富而是直接从浏览器缓存中取。

Last-modified

Last-modified是服务器告诉浏览器那一个财富最后被涂改的岁月。

有哪些用吗?比如浏览器根据cache-control:
max-age或Expires发掘缓存过期了,按理应该向服务重视新请求能源。但只要财富内容其实未有变,重新请求能源太浪费了,用Last-modified能够优化这么些历程。

在有Last-Modified的境况下,浏览器会发送If-Modified-Since伸手,服务器端比对请求里Last-modified时间和财富文件最后被退换时间是还是不是1律。假设同样,服务器端回复304 Not Modified,那样浏览器就能持续选拔本地的超时缓存了,节约了带宽。就算差别,服务器复苏200 OK,重新发送能源给浏览器。

Last-modified作为一种优化花招,必要和cache-control:
max-age或Expires共同采纳。

2.s-maxage同 max-age,覆盖
max-age、Expires,但仅适用于共享缓存,在私有缓存中被忽略。

ETag

Last-modified作为1种优化手腕,还不够周到,有时会有一对难题:

  1. 一点服务器无法确切得到能源的最终修改时间
  2. 假诺能源修改11分频仍,在秒以下的小运内实行修改,而Last-modified只可以准确到秒
  3. 1部分能源的最终修改时间变了,但实质上内容没改换

据此引入了ETag作为Last-modified的进阶版来缓和地方那个难题。服务端依照实体内容生成1段hash字符串,用以标记财富的状态。具体变化的hash字符串服务器有和谐的正规化,如Apache中,暗中认可是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)实行hash后收获的。举例Etag:
“54八三ec柒b-七c52”

ETag的法则和Last-modified类似,尽管浏览器根据cache-control:
max-age或Expires开采缓存过期了,但如若能源其实未有变的话,重新请求有点浪费。用ETag能够优化这些进程。

在有ETag的地方下,浏览器会发送If-None-Match请求,服务器端将请求里ETag字符串和财富文件的ETag字符串举办相比。倘使一样,服务器端回复304 Not Modified,那样浏览器就能承袭运用本地的过期缓存了,节约了带宽。若是不平等,服务器苏醒200 OK,重新发送资源给浏览器。

ETag作为Last-modified的进阶版,一样须求和cache-control:
max-age或Expires共同采用。而且当ETag和Last-modified同时设有时,Last-modified会被忽视,由此①旦ETag相称退步,固然缓存的Last-Modified没失效,也赢得不到30四Not Modified。

一般来讲图,浏览器发掘cache-control:
max-age=120过期了,就向服务器发送If-None-Match请求,服务器开采财富未被涂改过,因而回复304Not Modified布告浏览器继续行使本地缓存

ETag的标题在于运用网址服务器会接纳财富的少数性能来布局它,但对此持有多台服务器的网址,如Apache和IIS使用的性质分裂,导致变化的hash值区别,会大大下降验证的成功率。结果是,对于完全一样的资源,当浏览器从Apache上收获了能源,又向IIS发起Get请求,ETag是不会合营的。用户就不能收到越来越小更加快的304,而是收到200正规去下载该财富。

如在多台服务器上住宿你的网址,且你使用暗中同意ETag配置的Apache或IIS,那么功能难题你必须面对。比方Apache用FileETag可从ETag中移除inode值,只留下大小和岁月撮作为组件的ETag。IIS也有相近的ChangeNumber只留下时间撮作为组件的ETag。当然也足以通透到底移除ETag,如Apache上FileETag
none

完整缓存的进度:

3.public标明响应得以被其余对象(发送请求的客户端、代理服务器等等)缓存。

实时更新缓存

一经你改造了某能源,如CSS,但用户本地的cache-control:
max-age或Expires时间未到,用户还是会使用旧的CSS。除非缓存过期,或用户清理了浏览器缓存,不然你改改的能源文件是未有办法第3时半刻间公告到用户的。

借使想要完毕,只好修改能源文件路线,举个例子将CSS文件名重命名字为xxx-v二.css等。以此强制用户重新加载最新版财富。

4.private标明响应只可以被单个用户(大概是操作系统用户、浏览器用户)缓存,是非共享的,不可能被代理服务器缓存。

缓存计谋

可以为分化门类的能源文件定制不一样的缓存战略,如下图:

HTML文件必须保障新型,由此定义成no-cache,那样每一趟请求都会表明该HTML文件是或不是最新

JS和CSS文件因为时常会被修改,因而文件名嵌入指纹码(也得以是版本号或时间戳)。每一趟修改文件后文件名均不一样,也便是HTML里加载差异的文书,强制用户下载最新版。由于文件名里嵌入了指纹码,能够放心大胆地将max-age设置一年。

JS里标志为private,因为JS里恐怕会含有部分私人数据。

图片因为不常变,所以文件名不必包括指纹码,能够依照必要安装max-age

末段同盟ETag能够使得缓存机制更高效。

5.no-cache强制全数缓存了该响应的用户,在运用已缓存的多少前,发送带验证器的呼吁到服务器。不是字面意思上的不缓存。

6.no-store禁止缓存,每一趟请求都要向服务珍视新获取数据。

协商缓存

缓存的资源到期了,并不代表能源内容发生了改造,即使和服务器上的能源没有分化,实际上并完全没供给再一次恳请。客户端和服务器端通过某种验证机制验证当前央求能源是还是不是足以应用缓存。

浏览器第叁遍呼吁数据之后会将数据和响应底部的缓存标记存款和储蓄起来。再度伸手时会带上存款和储蓄的头顶字段,服务器端验证是还是不是可用。假如回去
30四 Not
Modified,代表能源没有爆发改换能够行使缓存的多少,获取新的晚点时间。反之重临200 就约等于再度请求了1次能源并替换旧财富。

Last-modified/If-Modified-Since

Last-modified:
服务器端财富的末梢修改时间,响应底部会带上这些标志。第2回呼吁之后,浏览器记录那一个时间,再度请求时,请求底部带上
If-Modified-Since 即为之前记录下的日子。服务器端收到带 If-Modified-Since
的伏乞后会去和能源的末段修改时间相比较。若修改过就赶回最新能源,状态码
200,若没有退换过则赶回 30肆。

注意:如若响应头中有 Last-modified 而从不 Expire 或 Cache-Control
时,浏览器会有自身的算法来推算出1个光阴缓存该文件多长期,不一致浏览器得出的年华不1致,所以
Last-modified 要记得合营 Expires/Cache-Control 使用。

Etag/If-None-Match

由服务器端上转换的壹段 hash 字符串,第3遍呼吁时响应头带上 ETag:
abcd,之后的呼吁中带上 If-None-Match: abcd,服务器检查 ETag,重返 30四 或
200。

至于 last-modified 和 Etag 区别,已经有无数人总计过了:

少数服务器无法正确得到能源的末段修改时间,那样就无法通过最终修改时间判别能源是还是不是更新。

Last-modified 只好正确到秒。

1对能源的末段修改时间转移了,然而内容没改动,使用 Last-modified
看不出内容未有改动。

Etag 的精度比 Last-modified
高,属于强验证,需要能源字节级其余如出壹辙,优先级高。要是服务器端有提供
ETag 的话,必须先对 ETag 举行 Conditional Request。

注意:实际使用 ETag/Last-modified
要小心保持一致性,做负载均衡和反向代理的话恐怕会冒出分化样的景况。总括ETag 也是需求占用财富的,即便改造不是过度频仍,看自身的急需用
Cache-Control 是还是不是足以满足。

网站地图xml地图