缓存控制 HTTP/1.1 中的 Cache-Control 常规标头字段用于执行缓存控制,使用此标头可通过其提供的各种指令来定义缓存策略。...缓存未占用资源 Etag 标头的另一个典型用法是缓存未更改的资源,如果用户再次访问给定的 URL(已设置Etag),并且该 URL过时,则客户端将在 If-None-Match 标头字段中发送其 Etag...也就是说使用这些 API 的应用程序想要请求相同的资源,那么他们应该具有相同的来源,除非来自其他来源的响应包括正确的 CORS 标头也可以。...使用 Origin 标头和 Access-Control-Allow-Origin 展示了最简单的访问控制协议。...例如,如果要允许源 https://mozilla.org 的代码访问资源,可以使用如下的指定方式 Access-Control-Allow-Origin: https://mozilla.org Vary
一般表示方法如下 Cache-Control: public 缓存控制 HTTP/1.1 中的 Cache-Control 常规标头字段用于执行缓存控制,使用此标头可通过其提供的各种指令来定义缓存策略...缓存未占用资源 Etag 标头的另一个典型用法是缓存未更改的资源,如果用户再次访问给定的 URL(已设置Etag),并且该 URL过时,则客户端将在 If-None-Match 标头字段中发送其 Etag...也就是说使用这些 API 的应用程序想要请求相同的资源,那么他们应该具有相同的来源,除非来自其他来源的响应包括正确的 CORS 标头也可以。...使用 Origin 标头和 Access-Control-Allow-Origin 展示了最简单的访问控制协议。...例如,如果要允许源 https://mozilla.org 的代码访问资源,可以使用如下的指定方式 Access-Control-Allow-Origin: https://mozilla.org Vary
你应该做的是,避免使用 kitchen-sink 标头,但请仔细阅读你正在使用的任何托管缓存机制的文档,并确保你选择的方式可以正确的控制缓存。...例如,对于带有 Accept-Language: en 标头并已缓存的英语内容,不希望再对具有 Accept-Language: ja 请求标头的请求重用该缓存响应。...在这种情况下,你可以通过在 Vary 标头的值中添加“Accept-Language”,根据语言单独缓存响应。...为了解决这些问题,ETag 响应标头被标准化作为替代方案。 ETag/If-None-Match ETag 响应标头的值是服务器生成的任意值。...请注意,数字“41”具有最长的 max-age(1 年),但具有 public。 public 值具有使响应可存储的效果,即使存在 Authorization 标头。
IANA还维护建议的新HTTP标头的注册表。 标题可以根据其上下文进行分组: 常规标头适用于请求和响应,但与正文中传输的数据无关。 请求标头包含有关要获取的资源或有关请求资源的客户端的更多信息。...端到端头 这些标头必须发送给消息的最终接收者:请求的服务器,或响应的客户端。中间代理必须重新传输未经修改的标头,并且缓存必须存储它们。...这样可以确保特定范围的新片段与先前片段的一致性,或者在修改现有文档时实现乐观的并发控制系统。 Vary 确定如何匹配请求标头,以决定是否可以使用缓存的响应,而不是从原始服务器请求新的响应。...Cookie2 包含先前由服务器发送的带有Set-Cookie2标头的HTTP cookie ,但已被废弃。使用Cookie代替。...Cross-Origin-Resource-Policy(CORP) 防止其他域读取应用此标头的资源的响应。
因为计算机网络中是可以有第三者出现的,也就是缓存服务器,这个指令通过影响请求/响应中的缓存服务器从而达到控制缓存的目的;不仅有缓存服务器,还有浏览器内部缓存也会影响链路的缓存。...例如下面这种写法 Server: Apache/2.4.1 (Unix) Vary Vary HTTP 响应标头确定如何匹配请求标头,以决定是否可以使用缓存的响应,而不是从原始服务器请求一个新的响应。...="UTF-8" Access-Control-Allow-Origin 一个返回的 HTTP 标头可能会具有 Access-Control-Allow-Origin ,Access-Control-Allow-Origin...例如,要允许源 https://mozilla.org 的代码访问资源,可以指定: Access-Control-Allow-Origin: https://mozilla.org Vary: Origin...如果服务器指定单个来源而不是 *通配符的话 ,则服务器还应在 Vary 响应标头中包含 Origin ,以向客户端指示 服务器响应将根据原始请求标头的值而有所不同。
主要使用场景在于实现并发控制 客户端错误 400 Bad Request : 请求体包含语法错误 401 Unauthorized : 需要验证用户身份,如果服务器就算是身份验证后也不允许客户访问资源...405 Method Not Allowed : 不允许执行目标方法,响应中应该带有 Allow 头,内容为对该资源有效的 HTTP 方法 406 Not Acceptable : 服务器不支持客户端请求的内容格式...Examples 数据缓存 大部分接口应该在响应头中携带 Last-Modified, ETag, Vary, Date 信息,客户端可以在随后请求这些资源的时候,在请求头中使用 If-Modified-Since...这个时候可以使用 Last-Modified 和/或 ETag 头来实现条件请求,支持乐观并发控制。 下文只考虑使用 PUT 和 PATCH 方法更新资源的情况。...If-Unmodified-Since 或者 If-Match 头与服务器记录的实际修改时间或 ETag 的历史值匹配,但资源已经被修改过的时候,返回状态码 409 Conflict 客户端发起的请求提供的条件符合实际值
尽管实体报头既不是请求也不是响应报头,但是它经常出现在请求头或响应头中,所以还是把他们包含在一个概念里。...消息头 1、Genaral headers 名称 作用 Cache-Control 控制缓存的行为; 详情 请求:no-cache(不要缓存的实体,要求现在从WEB服务器去取) max-age:(只接受...Clear-Site-Data 表示清除当前请求网站有关的浏览器数据(cookie,存储,缓存); Content-Security-Policy 允许站点管理者在指定的页面控制用户代理的资源; Content-Security-Policy-Report-Only...; Timing-Allow-Origin 用于指定特定站点,以允许其访问Resource Timing API提供的相关信息; Tk 显示了对相应请求的跟踪情况; Vary 服务器缓存的管理信息;WEB...标头告诉客户端实际返回的内容的内容类型。
Origin标头和标头的使用以Access-Control-Allow-Origin最简单的方式显示访问控制协议。...请注意,此标头类似于Allow响应标头,但严格在访问控制的上下文中使用。...访问控制允许来源部分 返回的资源可能具有一个Access-Control-Allow-Origin标头,其语法如下: Access-Control-Allow-Origin: | *...*通配符,则服务器也应Origin在Vary响应标头中包含信息-指示客户端服务器响应将基于Origin请求标头的值而有所不同。...访问控制允许凭证部分 的Access-Control-Allow-Credentials报头指示是否对所述请求的响应可以在被暴露credentials标记为真。
gzip_disable 禁用对具有匹配任何指定正则表达式的“User-Agent”标头字段的请求的响应的 gzip 压缩。...该指令接受多个参数: off 禁用所有代理请求的压缩,忽略其他参数 expired 如果响应标头包含带有禁用缓存值的“Expires”字段,则启用压缩 no-cache 如果响应头包含带有“no-cache...ETag”字段,则启用压缩 auth 如果请求标头包含“授权”字段,则启用压缩 any 为所有代理请求启用压缩 官方的解释是 仅将响应压缩到不会在代理服务器上缓存的请求是合理的 ,代理请求主要指的是一些高速缓存服务器或...如果开启的话,就会添加一个上面那样的响应头,告诉缓存代理服务器缓存两种版本的资源:压缩和非压缩的,这有助于避免一些公共代理不能正确地检测 Content-Encoding 标头的问题。...gzip_vary 开启后,响应头会有 Vary: Accept-Encoding 这样的内容返回回来, gzip_types 大家也可以自己测测,不添加那两个,直接访问 JPG 图片或者 txt 文档看看有没有压缩
100 的目的是允许正在发送带有请求正文的请求消息的客户端确定源服务器是否愿意接受请求(基于请求标头)在客户端发送请求正文之前。...201响应可能包含ETag响应标头字段,该字段指示刚刚创建的所请求变量的实体标签的当前值,请参见14.19节。...尽管任何新的或更新的元信息都应该应用于当前在用户代理的活动视图中的文档,但该响应主要旨在允许输入操作而不会导致更改用户代理的活动文档视图。...如果ETag或Last-Modified头不完全匹配,则缓存不得将206响应与其他先前缓存的内容组合在一起,请参见13.5.4。...-ETag和/或Content-Location(如果标头已发送) 在对同一请求的200条回复中 -如果字段值可能会过期,缓存控制和/或变化 与先前的任何回复中发送的相同 变体
CORS CORS 即跨域资源共享 (Cross-Origin Resource Sharing, CORS)。简而言之,就是在服务器端的响应中加入几个标头,使得浏览器能够跨域访问资源。...因此这个问题需要写代码来解决,根据请求头中的 Origin 来设置响应头 Access-Control-Allow-Origin 如果请求头不带有 Origin,证明未跨域,则不作任何处理 如果请求头带有...) 「但此时会出现一个新的问题:缓存」 CORS 与 Vary: Origin 在讨论与 Vary 关系时,先抛出一个问题: ❝如何避免 CDN 为 PC 端缓存移动端页面[4] ❞ 假设有两个域名访问...」 此时,Vary: Origin 就上场了,代表为不同的 Origin 缓存不同的资源,这在各个服务器端 CORS 中间件也能体现出来,如以下几段代码 此处是一段 koa 关于 CORS 的处理函数:...如同 CORS 一样,它也是有一个服务器的响应头来控制 Strict-Transport-Security: max-age=5184000 此时浏览器访问该域名时,会使用 307 Internal
访问了一个资源,但是这个资源响应的Access-Control-Allow-Origin的头是 https://flights.ctrip.com 。...我去访问了这个页面,并未发现此类报报错。回访了一些用户,也让同事一起尝试访问,得到的反馈是一部分客户端报错,一部分客户端正常。..."),由于源站响应了Vary: origin, accept-encoding,走入到了Vary缓存的逻辑中; ②再请求Origin: http://a.ctrip.com,由于走入到Vary缓存的逻辑...这代表body没有改变,但同时源站返回了正确的Access-Control-Allow-Origin的头给到CDN。然而CDN并没有替换源站给到的头,而是直接读取一个缓存中错误的头。...而一些头部的配置是直接放在CDN供应商的控制面板中做配置。例如默认不会开启Vary这些的配置,是为了提升缓存效率。
如果存在该字段,但是服务器并没有在响应中传递该字段允许的字符集,那么服务器需要返回一个406状态码,尽管传送一个不符合的响应也是被允许的。...这允许源服务器甚至通过配置成向客户端请求返回过期响应的缓存来防止缓存。 如果非缓存指令确实指定了一个或多个字段名,则缓存可以使用响应来满足后续请求,但受缓存上的任何其他限制。...尽管不建议这样做,但是在严格的连接约束下操作的用户代理可能违反此指令,但如果是这样,则必须明确警告用户已经提供了未经验证的响应。每个未经验证的访问都必须提供警告,并且需要明确的用户确认。... Vary字段值表示请求头字段集,该字段集在响应是“新鲜”的情况下完全确定是否允许缓存使用响应来响应后续请求,而无需重新验证。...服务器可能包含一个Vary标头字段,其中不可缓存的响应受服务器驱动协商的影响,因为这可能为用户代理提供关于“响应”在响应时变化的维度的有用信息。
代理可以执行多种功能: 缓存(缓存可以是公共的或私有的,如浏览器缓存) 过滤(如防病毒扫描或家长控制) 负载平衡(允许多个服务器为不同的请求提供服务) 身份验证(控制对不同资源的访问) 日志记录(允许存储历史信息...缓存控制 Cache-control 头 HTTP/1.1定义的 Cache-Control 头用来区分对缓存机制的支持情况, 请求头和响应头都支持这个属性。通过它提供的不同的值来定义缓存策略。...如果资源请求的响应头里含有ETag, 客户端可以在后续的请求的头中带上 If-None-Match 头来验证缓存。 Last-Modified 响应头可以作为一种弱校验器。...304的响应头也可以同时更新缓存文档的过期时间。 ️Vary 响应 Vary HTTP 响应头决定了对于后续的请求头,如何判断是请求一个新的资源还是使用缓存的文件。...当缓存服务器收到一个请求,只有当前的请求和原始(缓存)的请求头跟缓存的响应头里的Vary都匹配,才能使用缓存的响应。 使用vary头有利于内容服务的动态多样性。
Nginx 如何缓存动态内容 只要 Cache-Control 标头允许。即使在很短的时间内缓存动态内容也可以减少原始服务器和数据库的负载,从而缩短第一个字节的时间,因为不必为每个请求重新生成页面。...Nginx 使用 ETag 标头 在 Nginx 1.7.3 及更高版本中,ETag 标头完全支持 If-None-Match。...这些扩展做了什么: 如果当前正在更新 stale-while-revalidate,Cache-Control HTTP 标头的扩展允许使用陈旧的缓存响应。...HTTP 标头的 stale-if-error 扩展 Cache-Control 允许在发生错误时使用陈旧的缓存响应。...这些头具有比较低优先级, proxy_cache_use_stale 指令如上所述。 Nginx 是否支持 Vary 标头 Nginx 1.7.7 以及更高版本中是支持 Vary 标头的 。
缓存控制 Cache-control 头 HTTP/1.1定义的 Cache-Control 头用来区分对缓存机制的支持情况, 请求头和响应头都支持这个属性。通过它提供的不同的值来定义缓存策略。...对于像浏览器这样的HTTP UA,不知道ETag代表什么,不能预测它的值是多少。如果资源请求的响应头里含有ETag, 客户端可以在后续的请求的头中带上 If-None-Match 头来验证缓存。...304的响应头也可以同时更新缓存文档的过期时间。 Vary 响应 Vary HTTP 响应头决定了对于后续的请求头,如何判断是请求一个新的资源还是使用缓存的文件。...当缓存服务器收到一个请求,只有当前的请求和原始(缓存)的请求头跟缓存的响应头里的Vary都匹配,才能使用缓存的响应。 ? image.png 使用vary头有利于内容服务的动态多样性。...HTTP 响应首部字段 Access-Control-Allow-Origin: | * 其中,origin 参数的值指定了允许访问该资源的外域 URI。
Vary Vary 标头用于根据另一个标头改变缓存的响应。...If-None-Match 如果值不为 *,响应的 ETag 与提供的任何值都不匹配,则将从缓存中提供完整响应。 否则,将提供304(未修改)响应。...否则,将提供304-未修改响应 Date 从缓存提供时,如果未在原始响应中提供,则中间件会设置 Date 标头。...Content-Length 从缓存提供时,如果未在原始响应中提供,则中间件会设置 Content-Length 标头。 Age 忽略原始响应中发送的 Age 标头。...Set-Cookie 标头不得存在。 Vary 标头参数必须有效且不等于 *。 Content-Length 标头值(如果已设置)必须与响应正文的大小匹配。
主要大类有 可缓存性、阈值性、 重新验证并重新加载 和其他特性 可缓存性是唯一响应标头才具有的特性,我们会在响应标头中详述。...(请求标头) s-maxage: 重写了 max-age 和 Expires 请求头,仅仅适用于共享缓存,被私有缓存所忽略(这块不理解,看完响应头的 Cache-Control 再进行理解)(请求标头)...Access-Control-Allow-Origin 一个返回的 HTTP 标头可能会具有 Access-Control-Allow-Origin ,Access-Control-Allow-Origin...例如,要允许源 https://mozilla.org 的代码访问资源,可以指定: Access-Control-Allow-Origin: https://mozilla.org Vary: Origin...如果服务器指定单个来源而不是 *通配符的话 ,则服务器还应在 Vary 响应标头中包含 Origin ,以向客户端指示 服务器响应将根据原始请求标头的值而有所不同。
领取专属 10元无门槛券
手把手带您无忧上云