缓存控制的默认值是什么?

rha*_*dyn 48 browser caching browser-cache

我的问题是:有时浏览器过度缓存了一些资源,即使我已经修改过它们.但是在F5之后,一切都很好.

我整个下午都研究过这个案子.现在我完全理解"Last-Modified"或"Cache-Control"的观点.我知道如何解决我的问题(只是.js?版本或显式max-age = xxxx).但问题仍然没有解决:浏览器如何在没有 "Cache-Control"的情况下处理响应头,如下所示:

Content-Length: 49675
Content-Type: text/html
Last-Modified: Thu, 27 Dec 2012 03:03:50 GMT
Accept-Ranges: bytes
Etag: "0af7fcbdee3cd1:972"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Thu, 24 Jan 2013 07:46:16 GMT 
Run Code Online (Sandbox Code Playgroud)

当他们"进入酒吧"时,他们会清楚地缓存它们

在此输入图像描述

Sil*_*Fox 16

RFC 7234详细说明了默认情况下浏览器和代理应该执行的操作:

尽管高速缓存是HTTP的一个完全可选的特征,它可以假定重用缓存的响应是可取的,这样的复用是当不要求或本地配置防止它的默认行为.因此,HTTP缓存要求的重点是防止缓存存储不可重用的响应或不恰当地重用存储的响应,而不是强制缓存始终存储和重用特定的响应.


Jon*_*Jon 12

默认情况下,缓存通常在缓存中启用缓存,因此cache-control可用于自定义此行为或禁用它.

尽管缓存是HTTP的完全可选功能,但可以假设重用缓存的响应是可取的,并且当没有需求或本地配置阻止它时,这种重用是默认行为.因此,HTTP缓存要求的重点是防止缓存存储不可重用的响应或不恰当地重用存储的响应,而不是强制缓存始终存储和重用特定的响应.[ https://tools.ietf.org/html/rfc7234#section-2]

浏览器认为缓存响应的时间通常与上次修改时相关:

由于源服务器并不总是提供明确的到期时间,因此缓存可以在未指定显式时间时指定启发式到期时间,使用使用其他头字段值的算法(例如Last-Modified时间)...如果响应具有Last-Modified头字段([RFC7232]的第2.2节),鼓励缓存使用启发式到期值,该值不超过自那时起的间隔的某个部分.此分数的典型设置可能是10%.[ https://tools.ietf.org/html/rfc7234#section-4.2.2]

这篇文章详细介绍了不同浏览器如何计算该值.


Ste*_*vie 7

默认的缓存控制标头是: Private

缓存机制可以将此页面缓存在私有缓存中,并仅将其重新发送到单个客户端.这是默认值.大多数代理服务器不会使用此设置缓存页面.

请参阅http://msdn.microsoft.com/en-us/library/ms524721%28v=vs.90%29.aspx

  • 这不回答这个问题.这回答了IIS 6中的默认设置. (9认同)
  • 这是真正的答案:https://webmasters.stackexchange.com/questions/111298/what-happens-if-you-dont-set-cache-control-header (3认同)

小智 6

新鲜度寿命是基于多个标头计算的。如果指定了“ Cache-control:max-age = N”标头,则新鲜度生存期等于N。如果不存在此标头(通常是这种情况),则检查是否存在Expires标头。如果存在Expires标头,则其值减去Date标头的值将确定保鲜期。最后,如果两个标题都不存在,请查找“ Last-Modified”标题。如果存在此标头,则高速缓存的新鲜度生存期等于Date标头的值减去Last-modified标头的值除以10。

来源:https : //developer.mozilla.org/en-US/docs/Web/HTTP/Caching#Freshness