Questions tagged «cache-control»

HTTP`Cache-Control`标头指定了覆盖默认HTTP缓存行为的指令。

5
HTTP状态代码200(缓存)与状态代码304有什么区别?
我正在使用用于Firefox的Google“ Page Speed”插件来访问我的网站。 我页面上的某些组件表示为HTTP状态: 200200(缓存)304 由谷歌的“ Page Speed”。 我很困惑的是200(缓存)和304之间的区别。 我已经刷新了页面多次(但还没有清除缓存),而且似乎总是我的favicon.ico和一些图像的状态为200(缓存),而其他一些图像的状态为http,状态为304。 我不明白为什么会有所不同。 更新: 使用Google的“ Page Speed”,我收到了http://example.com/favicon.ico和http://cdn.example.com/js/ga.js的“ 200(缓存)” 但是,对于http://cdn.example.com/js/combined.min.js,我收到的HTTP状态为“ 304” 我不明白为什么我在同一目录/ js /中有两个JavaScript文件,一个返回http状态304,另一个返回200(缓存)状态代码。


19
已缓存,PHP生成的缩略图加载缓慢
问题A部分 ▉(获得100个赏金,获得奖励) 主要问题是如何使此网站加载速度更快。首先,我们需要阅读这些瀑布。感谢所有关于瀑布读数分析的建议。从这里显示的各种瀑布图可以看出,主要瓶颈是:PHP生成的缩略图。David建议从CDN进行无协议的jquery加载,这虽然使我的网站总体速度提高了3%,却没有解决该网站的主要瓶颈,却使我受益匪浅。是时候澄清我的问题了,另一个奖励是: 问题B部分 ▉(获得100个赏金,已获得奖励) 现在,新的重点是解决6个jpg图像所具有的问题,这些问题造成了大部分加载延迟。这6张图像是PHP生成的缩略图,很小,只有3〜5 kb,但是加载速度非常慢。注意各个图表上的“ 到第一个字节的时间 ”。问题仍然没有解决,但是James赏心悦纳,他修复了RedBot 强调的标头错误:“ If-Modified-Since条件请求返回了完整的内容。” 。 问题 C▉ (我最后的赏金:250分)不幸的是,即使修复了REdbot.org标头错误,由PHP生成的图像引起的延迟仍然没有改变。这些微小的3〜5Kb缩略图到底在想什么?所有这些标头信息都可以将火箭送上月球并返回。非常感谢您对此瓶颈的任何建议并将其视为可能的答案,因为我已经在这个瓶颈问题上停留了七个月了。提前谢谢 [我网站上的一些背景信息:CSS位于顶部。底部的JS(Jquery,JQuery UI,购买的菜单awm / menu.js引擎,tabs js引擎,视频swfobject.js)。第二幅图像上的黑线表示启动加载内容的内容。生气的机器人是我的宠物“ ZAM”。他无害,而且常常更快乐。] 载入瀑布:按时间顺序 | http://webpagetest.org 并行域分组 | http://webpagetest.org Site-Perf瀑布 | http://site-perf.com Pingdom工具瀑布 | http://tools.pingdom.com GTmetrix瀑布 | http://gtmetrix.com

1
无缓存和必须重新验证之间的区别
从RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1 无缓存 如果no-cache指令未指定字段名,则在未经原始服务器成功重新验证的情况下,缓存不得使用响应来满足后续请求。这样,即使已配置为将陈旧响应返回给客户端请求的缓存,原始服务器也可以防止缓存。 因此,它指示代理重新验证所有响应。 比较这个 必须重新验证 当在缓存接收到的响应中存在must-revalidate指令时,该缓存在过期之前将不能使用该条目来响应后续请求,而不必先通过原始服务器对其进行验证,则该缓存不得使用该条目 因此,它指示代理重新验证过时的响应。 特别是关于no-cache,这是用户代理实际,凭经验对待该指令的方式吗? 什么是点no-cache,如果有must-revalidate和max-age? 看到这个评论: http://palpapers.plynt.com/issues/2008Jul/cache-control-attributes/ 无缓存 尽管此指令听起来像是在指示浏览器不要缓存页面,但还是有细微的差别。根据RFC,“ no-cache”指令告诉浏览器在从缓存中提供页面之前,应先与服务器进行验证。重新验证是一种精巧的技术,可让应用程序节省带宽。如果浏览器已缓存的页面未更改,则服务器仅向浏览器发出信号,并从缓存中显示该页面。因此,浏览器(至少在理论上至少)将页面存储在其缓存中,但仅在与服务器重新验证后才显示页面。实际上,IE和Firefox已经开始对待no-cache指令,就像它指示浏览器甚至不缓存页面一样。大约一年前,我们开始观察这种行为。 有人在这方面有更多官方的吗? 更新资料 服务器仅当且仅当未能验证表示中的请求可能导致错误操作(例如静默未执行的金融交易)时,才应使用must-revalidate指令。 到现在为止,我从来没有想过这件事。RFC表示不要轻易使用必须重新验证。问题是,对于Web服务,您必须持否定态度,并为未知的客户端应用程序假设最糟糕的情况。任何陈旧的资源都有可能引起问题。 我刚刚考虑过的其他东西,如果没有Last-Modified或ETag,浏览器只能再次获取整个资源。但是,使用ETags,我观察到Chrome似乎至少在每次请求时都会重新验证。这使得这两个指令毫无意义,或者至少命名不当,因为它们不能正确地重新验证,除非请求还包含其他标头,这些标头随后仍然导致“始终重新验证”。 我只想使最后一点更清楚。仅设置must-revalidate但不包含ETag或Last-Modified,代理就只能再次获取内容,因为它没有什么可发送到服务器进行比较。 但是,我的经验测试表明,当响应中包含ETag或修改后的标头数据时,无论must-revalidate标头是否存在,代理始终会重新进行验证。 所以点must-revalidate是强制“旁路缓存”时,它会过时,如果当您设置了一生/年龄这只能发生,从而must-revalidate设置上,没有年龄或其他头的响应,它实际上就变成等同于no-cache自响应将立即被视为过期。 -因此,我将最终标记Gili的答案!

4
什么是缓存控制:私有?
当我访问chesseng.herokuapp.com时,我得到一个响应标头,看起来像 Cache-Control:private Connection:keep-alive Content-Encoding:gzip Content-Type:text/css Date:Tue, 16 Oct 2012 06:37:53 GMT Last-Modified:Tue, 16 Oct 2012 03:13:38 GMT Status:200 OK transfer-encoding:chunked Vary:Accept-Encoding X-Rack-Cache:miss 然后刷新页面并得到 Cache-Control:private Connection:keep-alive Date:Tue, 16 Oct 2012 06:20:49 GMT Status:304 Not Modified X-Rack-Cache:miss 因此似乎缓存正在运行。如果该方法适用于缓存,那么Expires和Cache-Control:max-age的意义是什么?更令人困惑的是,当我在https://developers.google.com/speed/pagespeed/insights/上测试页面时,它告诉我“利用浏览器缓存”。

2
如果第一个响应是AppCache(Symfony2)私有的,可以吗?
我正在尝试使用http缓存。在我的控制器中,我将响应设置如下: $response->setPublic(); $response->setMaxAge(120); $response->setSharedMaxAge(120); $response->setLastModified($lastModifiedAt); 开发模式 在开发环境中,第一个响应是带有以下标头的200: cache-control:max-age=120, public, s-maxage=120 last-modified:Wed, 29 Feb 2012 19:00:00 GMT 在接下来的2分钟内,每个响应都是带有以下标头的304: cache-control:max-age=120, public, s-maxage=120 这基本上就是我所期望的。 产品模式 在生产模式下,响应头不同。请注意,在app.php中,我将内核包装在AppCache中。 第一个响应是带有以下标头的200: cache-control:must-revalidate, no-cache, private last-modified:Thu, 01 Mar 2012 11:17:35 GMT 因此,这是一个私有的无缓存响应。 每个下一个请求几乎都是我期望的。具有以下标头的304: cache-control:max-age=120, public, s-maxage=120 我应该担心吗?这是预期的行为吗? 如果将Varnish或Akamai服务器放在前面,会发生什么? 我做了一些调试,发现由于最后修改的标头,响应是私有的。HttpCache内核使用EsiResponseCacheStrategy更新缓存的响应(HttpCache :: handle()方法)。 if (HttpKernelInterface::MASTER_REQUEST === $type) { $this->esiCacheStrategy->update($response); } …

1
高速缓存控制中的私有vs公共
您能否描述一个示例,该示例指示IIS托管的asp.net应用程序中的公共缓存控件和私有缓存控件之间的区别。 我在MSDN中阅读到,区别如下: Public: 设置Cache-Control:public,以指定响应可以由客户端和共享(代理)缓存进行缓存。 私人:默认值。设置Cache-Control:私有,以指定响应仅可在客户端上缓存,而不能由共享(代理服务器)缓存缓存。 我不确定我是否已完全了解每种选择的利弊。一个何时使用或不使用它的示例将是很棒的。 例如,如果我有两个托管相同应用程序的Web服务器,该怎么办?如果选择“私人”或“公共”,有什么需要注意的吗?

5
如何防止PHP站点的浏览器缓存
我有一个运行在云服务器中的php站点。每当我添加新文件css,js或图像时,浏览器就会加载存储在缓存中的旧js,css和图像文件。 我的网站具有doctype和meta标签,如下所示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)"> <meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)"> <meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)"> <meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)"> 由于上述doctype和元代码,我加载了浏览器中缓存的相同文件,而不是新文件



3
HTTP缓存控制的最大使用期限,必须重新验证
我有几个与Cache-Control相关的查询。 如果我max-age=3600, must-revalidate为静态html / js / images / css文件指定Cache-Control ,并在HTTP标头中定义了Last Modified Header: 浏览器/代理缓存(如Squid / Akamai)是否在max-age到期之前一直到原始服务器进行验证?还是会从缓存中提供内容直到最大使用期限到期? 在最大使用期限(从缓存中过期)之后,是否进行了If-Modified-Since检查,或者是否从源服务器重新下载了内容而不进行If-Modified-Since检查?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.