我正在使用Page Speed Firebug扩展来帮助提高页面性能.我有一个图片密集的页面,其中一个建议是这样的:
利用浏览器缓存以下可缓存资源的生命周期较短.为以下资源指定将来至少一周的到期时间:
我知道您可以在整个页面上设置Expires或Cache-Control标头,但如何为特定元素添加过期?它甚至是可能的,还是我误解了Page Speed所暗示的内容?
只是想知道是否有任何方法可以从代理的远程服务器覆盖/删除响应Cache-Control:private.设置架构看起来像这样(是的,它是一个反向代理设置):
[我的服务器] - > [远程服务器]
我的服务器站点可用/默认设置:
server {
listen 80; ## listen for ipv4
listen [::]:80 default ipv6only=on; ## listen for ipv6
server_name localhost;
location / {
if ($arg_AWSACCESSKEY) {
proxy_pass http://localhost:8088;
}
try_files $uri $uri/ /index.php /index.html /index.htm;
}
# other setting goes here
}
Run Code Online (Sandbox Code Playgroud)
我的服务器站点可用/远程的设置:
server {
listen 8088; ## listen for ipv4; this line is default and implied
# Make site accessible from http://localhost/
# server_name localhost;
location / {
proxy_pass http://remoteserver;
proxy_set_header Host remoteserverhostname.com;
proxy_ignore_headers Cache-Control …Run Code Online (Sandbox Code Playgroud) 我正在开发一个客户端/服务器应用程序,其中服务器保存大量数据,如客户端请求的大图像或视频文件,我需要创建一个内存客户端缓存系统来保存一些大数据加快这个过程.需要明确的是,每个单独的图像或视频都不是那么大,但所有图像或视频的总体尺寸可能非常大.
但是我面临着"我应该缓存多少数据"的问题,并且想知道Windows上是否存在某种关于我应该采用什么策略的黄金规则.缓存是在客户端完成的,我不需要在服务器上进行缓存.
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 A600对ExpiresByType text/html A600这个问题仍然存在.
我希望默认情况下让浏览器缓存我的内容,但这是一个交易破坏者.
是否有任何设置可以告诉Apache为3 ##状态代码发送不同的Cache-Control标头?
假设我有一个名为/ getdata的接口的asp.net mvc 3应用程序,不同的用户通过我的PC客户端软件连接到服务器并使用此接口获取私有数据.不同的用户通过他们自己的良好加密的令牌来识别.
现在的问题是ClientA告诉我们他得到了另一个用户的数据.从ClientA的日志中我们发现他得到了ClientB(但他们彼此不认识,他们不能共享帐户).我查看了我的Web应用程序的代码,但没有找到任何机会混合他们的数据.
所以我想知道这会发生:
(1)ClientB 通过Web代理在http标头中使用他的令牌向http://mysite.com/getdata发起http请求.
(2)Web代理访问我的Web服务器,获取ClientB的数据.
(3)我的Web服务器批准请求并返回ClientB的数据,因为一切正确.
(4)ClientB获取他的数据并正确显示
(5)在ClientB获取数据后几乎同一时间,ClientA启动相同的请求,并在标头中添加ClientA的令牌.
(6)Web代理找到ClientA请求的URL与ClientB相同,结果仍在缓存中,然后返回ClientB的数据.然后ClientA获取另一个数据.
在我的Web应用程序界面中,在开始时我已经设置了所有响应no-cache,max-age = 0等等以防止客户端缓存.我的问题是:
图像中的scanario可以发生吗?
如果是,我如何阻止Web代理返回缓存数据?我无法修改PC客户端的程序,并且Web代理服务器不受我的控制.
如果不是,A获得B数据的可能原因是什么?
我想提高我的网站加载速度,所以我使用http://gtmetrix.com/来检查我可以改进的地方.我获得的"利用浏览器缓存"的最低评级之一.我发现,我的文件(主要是图像)有问题"未指定过期".
好吧,问题很明显,我想.我开始谷歌搜索,我发现亚马逊S3更喜欢缓存控制元数据超过有效期(我失去了这个链接,现在我想也许我误解了一些东西).无论如何,我开始寻找如何将缓存控制元添加到S3对象.我找到了这个页面:http://www.bucketexplorer.com/documentation/amazon-s3--how-to-set-cache-control-header-for-s3-object.html
我了解到,我必须在我的PUT查询中添加字符串.
x-amz-meta-Cache-Control : max-age= <value in seconds> //(等号和数字之间不需要空格(我在这里犯了错误)).
我使用构造:Cache-control:max-age=1296000它工作正常.
之后我阅读了 https://developers.google.com/speed/docs/best-practices/caching 这篇文章告诉我:1)"将过期设置为至少一个月,最好是一年,以后".
2)"我们更喜欢Expires over Cache-Control:max-age,因为它受到更广泛的支持."(在Recommendations主题中).
所以,我开始寻找将过期日期设置为S3对象的方法.我发现了这个:http: //www.bucketexplorer.com/documentation/amazon-s3--set-object-expiration-on-amazon-s3-objects-put-get-delete-bucket-lifecycle.html
我发现:"使用Amazon S3对象生命周期管理,您可以在Amazon S3对象上定义对象到期.一旦为S3对象定义的生命周期到期,Amazon S3将删除此类对象.因此,当您想要保留数据时在S3上仅限时间,并且您希望它由Amazon S3自动删除,您可以设置对象到期."
我不想从S3删除我的文件.我只想添加缓存元数据以获得最长缓存时间或/和文件到期时间.
我完全和这个混淆了.有人可以解释一下我必须使用的东西:对象到期还是缓存控制?
我刚刚发现Chrome不会缓存放置在SVG中的图像,如果它们的cache-control标题设置为no-cache.Firefox和IE10似乎忽略了这个设置.
我用静态SVG创建了一个小测试页面:
HTML:
<div style="width: 500px; text-align: center;">
<input id="move-left-btn" type="button" value="<<">
<input id="move-right-btn" type="button" value=">>">
</div>
<div class="svgwrapper" style="width: 500px; height: 250px; background-color: lightgrey;">
<svg id="svg" version="1.1" xmlns="http://www.w3.org/2000/svg" width="500" height="250">
<g id="svggroup" class="transition-on" transform="matrix(0.2,0,0,0.2,80,35)">
<image width="1672" height="887" opacity="1" xlink:href="https://dl.dropboxusercontent.com/sh/q7htlj5h8qqfhjf/SVDuynM7R3/car.png"></image>
</g>
</svg>
</div>
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
$(document).ready(function() {
var curXPos = 80;
// Local test function which represent some server calls in my "real life" scenario
// Just updates the x-position in the transform matrix in this test …Run Code Online (Sandbox Code Playgroud) 在Dropwizard服务中设置静态资产的缓存控制头的最佳方法是什么?
一些谷歌搜索出现了一个AssetsBundle构造函数:
然而,经过进一步调查,看起来com.yammer.dropwizard.bundles软件包自版本5.1以来就不属于Dropwizard.
也许我错过了一些明显的东西,但有没有一种首选方法来处理这个问题?
为什么要将ETag设置为"必须要求级别"?
您在ETags返回之前获取资源...
我正在开发一个项目,我将客户端发送HTTP请求到服务器,该服务器返回带有ETag的HTTP Cache-Control标头以缓存响应(在每个添加请求中,它与If-None-Match标头进行比较确定数据是否陈旧以及是否应该发出新请求).在我当前的项目中,ETags参数使用条件GET体系结构,其具有RFC 2119中规定的MUST需求级别.
必须这个词,或术语"必需"或"应该",意味着该定义是规范的绝对要求.我不明白使用MUST需求级别的条件GET的意图?根据我的理解,必须要求限制(正确吗?)提供给发出请求的客户端的资源,但是客户端(在本例中我)已经拥有来自第一个请求的资源.我可以继续获得相同的资源(或更新的更新资源),无论是否返回If-None-Match和ETag头字段.
如果不限制返回的资源,在这种情况下将其设置为MUST需求级别的目的是什么?除了能够缓存和限制对服务器的请求数量(我从客户端的角度来看,是的,是的我知道我可以缓存它,但为什么必须要求)?这不仅仅用于限制资源吗?
所以基本上,如果我可以在有或没有资源的情况下获得资源,是不是要求这个必须要求不是必需的?我在这里错过了什么吗?
我的问题不是询问Etags,Cache-Control或If-None-Match标头的工作原理和方式.
在此先感谢,欢呼!
我有一个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
cache-control ×10
caching ×3
amazon-s3 ×2
http-headers ×2
rest ×2
apache ×1
asp.net-mvc ×1
c# ×1
delphi ×1
dropwizard ×1
etag ×1
html ×1
http ×1
javascript ×1
metadata ×1
mod-expires ×1
nginx ×1
redirect ×1
security ×1
svg ×1
webproxy ×1
windows ×1