很奇怪。
在我的 web 应用程序中,我有一个指向存储在 S3 中的电子表格的链接。我以前下载过那个文件。现在,我在 s3 中更新了该文件。
当我尝试从同一个链接再次下载它时,我仍然得到以前的版本。
如果我清除缓存,它将下载较新的版本...
您有两种选择可以解决此问题:
您可以告诉亚马逊Cache-Control在检索您的 URL 时如何设置标头。与指定Content-Type标题的方式相同,您也可以控制其他标题。您可以将缓存降低到更短的时间间隔。
您可以控制链接到 S3 上的文件的网页的缓存,并修改指向 S3 文件的链接,以便在文件更改时不会从缓存中使用其内容。基本上,您可以?version=1在 URL 的末尾放置一个。如果您将其更改为?version=2(等等),浏览器将不会使用文件的缓存版本,因为 URL 不会精确匹配。
第二种方法允许您对 S3 文件使用主动缓存并避免浪费传输。但它要求您在每次更改文件内容时修改链接到该文件的每个网页。
有关这两种技术的更多信息,请参阅降低您的 Amazon S3 账单,尽管您正试图获得相反的效果。
小智 5
是的,它确实。即使我不使用 S3 作为存储,我也遇到同样的问题。我有一个 Symfony2 应用程序,它提供本地文件的内容供下载。url 始终相同,因为我正在 PHP 中获取文件的内容并将它们发送到浏览器。如果我修改本地文件的内容,Firefox 和 IE 将收到最新的文件版本,但 chrome 不会。我尝试设置缓存控制标头,但没有用,Chrome 只是忽略它们。
我正在使用的标题的一些想法:
$response->headers->addCacheControlDirective('no-cache', true);
$response->headers->addCacheControlDirective('max-age', 0);
$response->headers->addCacheControlDirective('must-revalidate', true);
$response->headers->addCacheControlDirective('no-store', true);
Run Code Online (Sandbox Code Playgroud)
如果我向 url 添加随机版本号 (?version=randomIntByTime) Chrome 最终将保存文件的最新版本。为 Chrome 编写额外的代码是令人沮丧的。
| 归档时间: |
|
| 查看次数: |
15145 次 |
| 最近记录: |