标签: cache-control

HTTP标头:缓存控制是否足够,还是我还需要Expires?

HTTP 1.1引入了一类新的标头,Cache-Control响应标头,使Web发布者能够更好地控制其内容,并解决Expires的限制.

由于其局限性,过期是一种痛苦.首先,因为涉及绝对日期,所以必须同步Web服务器上的时钟和客户端的缓存; 如果他们对时间有不同的想法,那么预期的结果将无法实现,而缓存可能会错误地将陈旧的内容视为新鲜的.

Expires的另一个问题是,很容易忘记您已将某些内容设置为在特定时间到期.如果在通过之前未更新Expires时间,则每个请求都将返回到Web服务器,从而增加了负载和延迟.

那么,我们是否需要再使用Expires,或者Cache-Control(具体来说,max-age设置为一些远期的秒数)足以支持我的静态内容?我想避免使用Expires,但我应该同时设置吗?

http cache-control http-headers

8
推荐指数
1
解决办法
2206
查看次数

强制AJAX请求使用服务器重新验证缓存,而无需完全重新加载

我有一个Web应用程序,可以让浏览器长时间缓存AJAX请求.我已经找到了如何在检测到可能的修改时提出完全绕过缓存的请求.但我想让用户触发数据刷新.

在这种情况下,我希望浏览器检查服务器是否停止缓存,如果不缓存则使用它(即,如果服务器响应304代码).目标是节省加载时间,因为数据量巨大.

服务器在所有响应中包含以下标头:

Cache-Control: private, max-age=604800
Last-Modified: ... # actual last modification date
Run Code Online (Sandbox Code Playgroud)

我设法通过在请求中使用以下HTTP标头完全在Chrome中破解了缓存对象(尚未测试其他浏览器):

Cache-Control: max-age=0
If-Last-Modified: Tue, 01 Jan 1970 01:00:00 +0100
Run Code Online (Sandbox Code Playgroud)

If-Last-Modified条线是真正具有效果的线.Chrome似乎忽略Cache-Control了请求中的标头.

我还发现Cache-Control: must-revalidate在服务器响应中使用强制浏览器为每个请求验证其缓存与服务器.

但有没有办法重新验证只有一个精确的请求,在客户端决定

请注意,我并没有特别依赖于使用HTTP标头执行此操作,因此欢迎任何其他我不了解的方法!

javascript ajax http cache-control browser-cache

8
推荐指数
1
解决办法
1202
查看次数

覆盖HTTP响应中的"缓存控制"值

我有一个网页,当我访问材料时返回以下标题:

HTTP/1.1 200 OK
Date: Sat, 29 Jun 2013 15:57:25 GMT
Server: Apache
Content-Length: 2247515
Cache-Control: no-cache, no-store, must-revalidate, max-age=-1
Pragma: no-cache, no-store
Expires: -1
Connection: close
Run Code Online (Sandbox Code Playgroud)

使用chrome扩展,我想修改它,response header以便实际缓存材料而不是浪费带宽.

我有以下示例代码:

chrome.webRequest.onHeadersReceived.addListener(function(details) 
    {
        // Delete the required elements
        removeHeader(details.responseHeaders, 'pragma');
        removeHeader(details.responseHeaders, 'expires');

        // Modify cache-control
        updateHeader(details.responseHeaders, 'cache-control', 'max-age=3600;')

        console.log(details.url);
        console.log(details.responseHeaders);

        return{responseHeaders: details.responseHeaders};
    },
    {urls: ["<all_urls>"]}, ['blocking', 'responseHeaders']
);
Run Code Online (Sandbox Code Playgroud)

这正确地将标题修改为这样的东西(基于console.log()输出):

HTTP/1.1 200 OK
Date: Sat, 29 Jun 2013 15:57:25 GMT
Server: Apache
Content-Length: 2247515
Cache-Control: max-age=3600
Connection: close
Run Code Online (Sandbox Code Playgroud)

但基于我试图检查的所有内容,我无法看到任何证据确实发生了这种情况:

  1. 在 …

google-chrome httpresponse cache-control http-headers google-chrome-extension

8
推荐指数
1
解决办法
3175
查看次数

mod_expires为3个##状态代码发送Cache-Control标头

Apache正在为3 ##状态代码发送Cache-Control标头,例如302重定向.这导致Firefox(可能从Firefox 5开始)缓存302重定向 - 这导致我的某些页面无限重定向循环.

以下是我在我使用的设置httpd.conf:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A600
</IfModule>
Run Code Online (Sandbox Code Playgroud)

如果我删除了ExpiresDefault设置,问题就会消失,所以我确信这是造成问题的确切设置.如果我改变ExpiresDefault A600ExpiresByType text/html A600这个问题仍然存在.

我希望默认情况下让浏览器缓存我的内容,但这是一个交易破坏者.

是否有任何设置可以告诉Apache为3 ##状态代码发送不同的Cache-Control标头?

apache redirect cache-control mod-expires browser-cache

7
推荐指数
1
解决办法
1026
查看次数

缓存验证(缓存控制头的无缓存)在http协议中做什么?

我试图了解cache-controlhttp 标头是如何工作的。

cache-control头可以有no-cache值。我查了一下定义w3c,它说:

如果该no-cache指令未指定字段名称,则在未成功与源服务器重新验证的情况下,缓存不得使用响应来满足后续请求。

它告诉no-cachevalue 将触发每个请求的验证。

我想知道的是,cache validationhttp协议是什么以及它的作用是什么?

谢谢你们的帮助。现在我明白验证意味着检查缓存是否包含来自服务器的最新内容。

我的进一步问题是无缓存将解决哪些问题。请提供一些场景,例如在http标头中应用no-cache后,将修复哪些安全问题。

多谢你们

w3c http cache-control http-headers

7
推荐指数
1
解决办法
1285
查看次数

S3/CloudFront,提供标题为"Cache-Control:max-age = 365000000,immutable"的所有文件

我有一个S3存储桶,其上面有CloudFront CDN.

这个S3存储桶是"不可变的",这意味着一旦我在那里上传文件,我就永远不会删除它或更新它.所有客户端都可以非常积极地缓存来自S3/CloudFront的文件.

目前,Etags工作得非常好,客户大多数时间都会收到304回复.但是获得304响应仍然需要通过更积极的缓存来避免往返.

所以我想要这样的行为:

  • CloudFront CDN缓存永远不会失效,因为S3缓存永远不会更改.CloudFront不需要再次向S3询问文件多次.我想我已经使用CloudFront分配设置成功配置了它.

  • CloudFront应该使用标头提供所有文件Cache-Control: max-age=365000000, immutable(截至2016年,immutable是一个新的,部分支持的值)

我不明白我怎样才能达到预期的效果.我应该在CloudFront或S3级别处理吗?我已经阅读了一些关于为每个S3文件配置适当标头的内容.是不是有一个全局设置来提供我可以使用的自定义http标头的所有文件?

caching cache-control amazon-s3 amazon-web-services amazon-cloudfront

7
推荐指数
1
解决办法
4563
查看次数

Nginx - 使用 try_files 时如何为 index.html 添加标头

我有以下配置(对于 Angular 应用程序):

location / {
    try_files $uri /index.html;
    add_header "Cache-Control" "no-cache" ;
}
Run Code Online (Sandbox Code Playgroud)

现在我想仅为index.html,但不为任何其他文件添加该标头。怎么做?

nginx cache-control http-headers

7
推荐指数
1
解决办法
5513
查看次数

如何在 amazon cloudfront 中设置 Cache-Control Header?

我有一个 amazon cloudfront 发行版,它为我的 CDN 创建了一个“来源”。在我的行为中,我设置了最大 TTL、最小 TTL 和默认 TTL。但是我的响应头不会在重定向的静态文件中返回 Cache-control 头。如何设置缓存控制?我需要这个用于谷歌页面洞察

创建缓存控制的文件

我的标题响应

header cache-control amazon-web-services amazon-cloudfront pagespeed-insights

7
推荐指数
4
解决办法
8194
查看次数

用于提供“陈旧”内容的 CDN 支持/配置,在后台刷新

目标

始终提供来自 CDN EDGE 缓存的内容,无论内容多么陈旧。尽可能在后台刷新它。

问题

我有一个NextJS应用程序,它在服务器端呈现一些 React 组件并将它们交付给客户端。对于这个讨论,让我们只考虑我的主页,它是未经身份验证的,对每个人都是一样的。

我想要的是将服务器呈现的主页缓存在 CDN 的 EDGE 节点上,并尽可能多地或始终从该缓存中为终端客户端提供服务。

从我读到的内容来看,CDN(如 Fastly)正确支持缓存相关的标头设置,例如Surrogate-Control并且Cache-Control: stale-while-revalidate应该能够做到这一点,但实际上,我没有看到它像我期望的那样工作。我看到的是:

  • 请求错过缓存并在先前的请求应该预热它时返回到源
  • 请求从缓存提供,但在源发布新内容时永远不会更新

例子

考虑以下时间线:


[T0] - Visitor1 请求www.mysite.com- CDN 缓存完全冷,因此请求必须返回我的源(AWS Lambda)并重新计算主页。返回带有标头Surrogate-Control: max-age=100和 的响应Cache-Control: public, no-store, must-revalidate。然后访问者 1 提供了主页,但他们不得不等待高达 5 秒钟!呸!愿没有其他游客遭受同样的命运。

[T50] - 访问者 2 请求www.mysite.com- CDN 缓存包含我的文档并立即将其返回给访问者。他们只需要等待 40 毫秒!惊人的。在后台,CDN 从我的源重新获取最新版本的主页。原来它没有改变。

[T80] -www.mysite.com向主页发布新内容,使任何缓存的内容真正过时。该网站的V2现已上线!

[T110] - 访问者 1 返回到www.mysite.com- 从 CDN 的角度来看,自访问者 2 的请求以来只有 60 …

cdn cache-control cloudflare fastly next.js

7
推荐指数
1
解决办法
545
查看次数

如何知道资源是否真正从 chrome devtools 中的缓存加载?

在此输入图像描述

Chrome devtools 网络选项卡显示与缓存资源文件大小相同的“通过网络传输的数据”值。如果我阻止上图中出现的最后一个请求,则不会加载图片,但第二个请求仍然显示传输了相同数量的数据。如何知道图像资源是否真正从缓存中提取并节省了带宽?

注意:我正在使用 max-age 缓存控制策略,并且在 Firefox 中它显然有效。

caching cache-control http-headers google-chrome-devtools max-age

7
推荐指数
1
解决办法
3786
查看次数