问题:我似乎无法让FireFox缓存从动态服务器发送的图像
设置:静态Apache服务器,在后端具有反向代理到动态服务器(mod_perl2).
这是服务器的请求URL.它被发送到动态服务器,其中cookie用于验证对映像的访问:
请求标题
Host: <OBSCURED>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: <OBSCURED>
Cookie: pz_cred=4KCNr0RM15%2FJCOt%2BEa6%2BL62z%2Fxvbp2xNQHY5pJw5d6Q
Pragma: no-cache
Cache-Control: no-cache
Run Code Online (Sandbox Code Playgroud)
动态服务器将图像流回服务器,并提供以下响应:
响应标题
Date: Tue, 24 Nov 2009 04:28:07 GMT
Server: Apache/2.2.11 (Ubuntu) mod_apreq2-20051231/2.6.0 mod_perl/2.0.4 Perl/v5.10.0
Cache-Control: public, max-age=31536000
Content-Length: 25496
Content-Type: image/jpeg
Via: 1.1 127.0.1.1:8081
Keep-Alive: timeout=15, max=75
Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)
到目前为止,这么好(我认为).但是,在重新加载页面时,图像不会显示为缓存,并再次发送请求:
请求标题
Host: <OBSCURED>
User-Agent: Mozilla/5.0 (X11; U; …Run Code Online (Sandbox Code Playgroud) 假设你有这种情况:一个简单的博客主页,它既可以加载静态内容,也可以加载动态内容.静态内容由很少变化的图像组成.我还有数据库驱动的动态内容.动态内容包含所有博客文章(文本和图像)和相关用户评论.动态内容定期从每小时变化到每天.
您将如何使用缓存?特别是假设用户正在发表评论或管理员正在添加/编辑帖子,您希望手动触发缓存清除以获得此博客主页的更新版本?
谢谢你的耐心.
卢卡
再次感谢
正如我的标题所说,我正在尝试缓存控制我网站上的内容,但似乎我的内容没有被缓存.
这是我的.htaccess文件中的代码:
Header unset Pragma
FileETag None
Header unset ETag
# cache images/pdf docs for 10 days
<FilesMatch "\.(ico|pdf|jpg|jpeg|png|gif|js)$">
Header set Cache-Control "max-age=864000, public, must-revalidate"
Header unset Last-Modified
</FilesMatch>
# cache html/htm/xml/txt diles for 2 hours
<FilesMatch "\.(html|htm|xml|txt|xsl)$">
Header set Cache-Control "max-age=7200, must-revalidate"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多教程,但似乎没有一个教程.顺便说一句,其他.htaccess代码,如重定向和东西,都可以工作.
我想在 Azure 存储容器中的所有现有和未来 Blob上设置默认缓存标头。
我只能找到有关如何为现有 blob 设置缓存标头的教程:https : //azure.microsoft.com/nl-nl/documentation/articles/cdn-manage-expiration-of-blob-content/
如何确保未来的 blob 也获得相同的标头,而不必每隔一段时间运行一次脚本?也许有一种方法可以在容器上设置默认缓存标头?
我很清楚如何自己设置它,但我担心在两个不同的地方配置它。要获得赏金,请告诉我应该在哪里寻找现有设置。
我们已经寻找现有设置的地方,但没有成功:
<StaticContent>部分SetMaxAge)我们最近注意到我们的 CSS 和 JS 文件没有得到刷新。当我检查网络流量时,它们从服务器返回,并带有一个标头 ( Cache-Control: max-age=604800),该标头为它们提供了 7 天的生命周期。
我们需要减少缓存寿命。但对于我的生活,我找不到它的位置。
它没有在 web.config<StaticContent>部分中设置。
它没有在 IIS 输出缓存部分设置(我查看了机器、站点和应用程序——它们都是空白的)。
它没有在代码中设置——我进行了全局代码搜索SetMaxAge并得到了 nuthin'。我还能在哪里看?
它可能是由我们数据中心的网关或负载均衡器设置的吗?
我最近发现,我们Cache-Control:no-cache在所有WebApi响应中都使用了它。我知道在浏览器缓存发生变化之前,您永远都不知道浏览器是否可以缓存json,因此这很重要。
据我所记得,目前还没有现代浏览器在缓存ajax响应,因此不需要此标头。但是我真的很想再次检查一下,并在这里询问一下行为,因为找不到有关该主题的最新文章。
所以问题实际上是:我们是否仍需要设置Cache-Control:no-cacheSPA应用程序的Web api调用,如果是,那么哪些浏览器进行缓存?
ajax cache-control browser-cache asp.net-web-api single-page-application
我前段时间回答过这个问题.
我在Symfony 3.4中的代码.
$response->setCache([
'max_age' => 3600,
'public' => true,
's_maxage' => 3600,
]);
// (optional) set a custom Cache-Control directive
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
Run Code Online (Sandbox Code Playgroud)
在某些原因,我仍然得到Cache-Control像这样的其他标题:
Cache-Control: max-age=0, must-revalidate, private, s-maxage=3600
X-Symfony-Cache: GET /: miss
Run Code Online (Sandbox Code Playgroud)
我注意到在Symfony 3.2代码中运行良好,但在3.4中我没有进入publicCache-Control(并且max-age=0看起来也很糟糕).
第二件事是$response在控制器中倾倒- 一切看起来都很好:
#headers: array:2 [?
"cache-control" => array:1 [?
0 => "max-age=3600, must-revalidate, public, s-maxage=3600"
]
"date" => array:1 [?
0 => "Sat, 12 May 2018 18:42:04 GMT"
]
]
Run Code Online (Sandbox Code Playgroud)
它是某种Symfony bug吗?我应该报告吗?
在Rails 5.2中,Active Storage使我们能够生成永久性URL,这些URL通过每次调用时唯一的签名URL重定向到资产。
的HTML:
<img src='/rails/active_storage/blobs/ey...' />
服务器:
Started GET "/rails/active_storage/blobs/eyJfcmFpbH...
302 Redirected to https://bucket.amazon/image.jpg?X-Amz-Algorithm=AWS4-HMA...
Run Code Online (Sandbox Code Playgroud)
我想知道Active Storage正在向整体中添加HTTP请求的数量,网页中的一个blob_url =向整体中的另一个请求,以便通过302重定向获取最终的资产url。因此一页包含20张图像=> 20个附加请求。(但它们很快)
所以我的问题是:为什么使用此系统而不是直接使用最终URL(.service_url):
<img src='https://bucket.amazon/image.jpg?X-Amz-Algo...'> ?
我在想这些论点:(但是还有其他吗?)
ruby-on-rails http cache-control http-headers rails-activestorage
我在生产环境中有一个 Web 应用程序。用户每天都在使用它,当我发布更新并且用户返回 Web 应用程序时,他/她会查看 Web 应用程序的旧版本。他需要刷新浏览器才能加载新版本。我怎么解决这个问题?每次发布更新(每周 3-4 次)时,我都无法告诉数百名用户刷新页面。我使用以下内容来构建我的前端应用程序:Angular7 with angular-cli。
我经常更新的Angular应用程序存在问题。
我想避免浏览器缓存,我正在尝试几种替代方法,但是它们都不起作用。
第一件事是我很难测试该解决方案是否有效,因为当我上载新版本时,有时我看到它而不必执行其他操作,而不必刷新页面,而有时候我需要打开控制台并强制刷新清空缓存。
我试图在请求标头中包含Cache-Control:no-cache,如您在图像中所见,但这对我不起作用。
我也尝试过,放入app.component.ts
templateUrl: './app.component.html? v1'
Run Code Online (Sandbox Code Playgroud)
正如我在一些答案中看到的那样,但都没有。
事实是我很绝望,因为当我给出我认为可行的东西时,当我与老板核对时,他不会刷新它:-(,可惜的是,正如我所说的,我不知道该怎么做确实,每次我进入网络时,都要从服务器请求最新版本。
谢谢您的帮助