expires cache-control

Expires/Cache-Contro

Expires/Cache协定与上述考证协定最大的差别在于,他能够省略发送考证要求环节,不需要服务器的考证,而直接运用当地缓存。 一般这类体式格局,适用于,项目稳固,版本迭代不多的时刻。
Expires
在服务器端能够设置Expires的一个相对时候。

//Response Headers
Expires:Tue, 03 May 2016 09:33:34 GMT

这通知浏览器,在2016.5.3号之前,能够直接运用该文本的缓存副本。然则,可能会由于服务器和客户端的GMT时候差别,会有肯定的bug。 所以,这里只发起在长时候缓存的情况下运用。不然,应当挑选Cache-Control.
那在服务器端该怎样设置呢? 这里以nginx为例:

location ~* \.(?:css|js)$ {
  expires 1d;
  access_log off;
  add_header Cache-Control "public";
}

经由过程expires设置逾期时候为一天,此时,服务器会依据当前的时候,加上一天.同时增加Expires和Cache-Control头部标签。
即,获得的Response Header为:

Expires: Fri, 28 Feb 2014 10:42:09 GMT
Cache-Control: max-age=86400 //24*60*60

(HTTP划定,假如涌现max-age和expires,则max-age默许覆蓋掉expires)
当expires为负数示意no-cache,正数或零示意max-age=time。
假如你不想缓存,能够直接设置:

expires -1; //永久逾期,Cache-Control: no-cache

细致能够直接参阅:nginx设置

Cache-Control
这应当是HTTP1.1为了处理HTTP1.0中expires的时候差的bug,而新增加的一个tag. 他的设置项许多,实在完整都能够庖代expires(如今大多数服务器都支撑). 援用一段原话:

Cache-Control 头在 HTTP/1.1 范例中定义,庖代了之前用来定义响应缓存战略的头(比方 Expires)。当前的一切浏览器都支撑 Cache-Control,因而,运用它就够了。
不过,现在大部分服务器都会将二者增加上,由于HTTP划定,假如Cache-Control和expires同时涌现的话,expires会默许被覆蓋掉。
此时,返回的响应码不再是304(文件未修改),而是200(资本胜利接见).

当前每次发送要求之前浏览器会搜检缓存体系里,是不是有响应文件的备份,假如有的话,则直接从当地模拟一个Response头
理论知识铺垫终了,我们来take a look. 看看cache-control 有哪些能够设置的属性(以下属性都跟在cache-control后)

public: 共有缓存,可被缓存代办服务器缓存,比方CDN
private: 私有缓存,不能被共有缓存代办服务器缓存,可被用户的代办缓存如浏览器。

max-age=[秒]:示意在这个时候范围内缓存是新颖的无需更新。相似Expires时候,不过这个时候是相对的,而不是相对的。也就是某次要求胜利后若干秒内缓存是新颖的。

s-maxage=[秒]:相似max-age, 除了仅应用于同享缓存(如代办)。

no-cache:这里不是不缓存的意义,只是每次在运用缓存之前都强迫发送要求给源服务器举行考证,搜检文件该没转变(实在这里和ETag/Last区分不大)

no-store:就是制止缓存,不让浏览器保存缓存副本

must-revalidate:通知浏览器,你这必需再次考证搜检信息是不是逾期, 返回的代号就不是200而是304了。

proxy-revalidate:相似must-revalidate,除了只能应用于代办缓存。
比方,这里我能够设置Cache-Control为:

//Response Headers
Cache-Control:private, max-age=0, must-revalidate

该文件是一个私有文件,只能被浏览器缓存,而不能被代办缓存。max-age标识该缓存马上逾期,实在和no-cache实际上区分不大. 然后must-revalidate通知浏览器,你必需给我再考证文件过没逾期,比方接下来可能会考证Last-Modified或许ETag.假如没有逾期则运用当地缓存.

    原文作者:ranyuemelody
    原文地址: https://segmentfault.com/a/1190000004896123
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞