我遇到了一些 HTTP 缓存问题,这是由于某些下游应用程序未将 Cache-Control 标头放在时间敏感数据上造成的。我需要证明这是一个破碎的情况。
当 HTTP 1.1 不存在 Cache-Control 标头时,是否有任何关于缓存和代理允许或常见响应处理行为的在线简洁声明?我看到 RFC2616,但它似乎不包含任何关于没有 Cache-Control 标头的响应的规范或 SHOULD 语句。
假设CPU修改了位置x+50中的值并且没有将其刷新回主存(回写)。
同时,设备发起从 x 到 x+100 的 DMA 读取请求。
那么,如何通知CPU刷新脏缓存行呢?
当服务器给出时Cache-Control: max-age=4320000,
新鲜度是在请求时间之后 4320000 秒后考虑的,还是在上次修改日期之后考虑的?
看看他们用于小部件的脚本:
http://platform.linkedin.com/in.js
您会看到 acache-control的数字非常高(现在:Cache-Control:max-age=29326)。
那么,如果他们搞砸了一个版本,并且每个人都被一个损坏的脚本文件困住了 20 天,会发生什么呢?
ps,这是他们使用的小部件代码:
<script src="//platform.linkedin.com/in.js" type="text/javascript"></script>
<script type="IN/MemberProfile" data-id="https://www.linkedin.com/in/dirkboer" data-format="inline"></script>
Run Code Online (Sandbox Code Playgroud) 我使用谷歌速度来优化我的网站,它告诉我放入很棒的缓存字体。
\n\n我的 htaccess 有以下代码,但它似乎没有将该文件放入缓存中:
\n\n# MOD_DEFLATE COMPRESSION\nSetOutputFilter DEFLATE\nAddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/x-httpd-php\n#Pour les navigateurs incompatibles\nBrowserMatch ^Mozilla/4 gzip-only-text/html\nBrowserMatch ^Mozilla/4\\.0[678] no-gzip\nBrowserMatch \\bMSIE !no-gzip !gzip-only-text/html\nBrowserMatch \\bMSI[E] !no-gzip !gzip-only-text/html\n#ne pas mettre en cache si ces fichiers le sont d\xc3\xa9j\xc3\xa0\nSetEnvIfNoCase Request_URI \\.(?:gif|jpe?g|png)$ no-gzip\n#les proxies doivent donner le bon contenu\nHeader append Vary User-Agent env=!dont-vary\n\n# BEGIN Expire headers\n<IfModule mod_expires.c>\n ExpiresActive On\n ExpiresDefault "access plus 1 year"\n ExpiresByType image/jpg "access plus 1 year"\n ExpiresByType image/jpeg "access plus 1 year"\n ExpiresByType image/png "access plus …Run Code Online (Sandbox Code Playgroud) 我读过有关单个缓存控制标头值的内容。为了测试我学到的东西,我打开 Facebook 并进行检查。这是我得到的 Cache-Control 响应标头:
cache-control:private, no-cache, no-store, must-revalidate
Run Code Online (Sandbox Code Playgroud)
我很困惑这个标头实际上告诉了什么,因为它一次包含 4 个值。那么,如果通过网络发送的资源包含这样的标头,会发生什么情况呢?
编辑:
no-store 表示“根本不存储,不在私有非公共缓存中存储”,no-cache 表示“是的,您可以缓存,但请确保在请求资源时重新验证新鲜度”。Private 表示“您可以存储在私有缓存中”。它不能同时完成这三件事。但是,我们让他们同时发送响应。看起来还有一些我不知道的附加规则。
对于我们的项目,我们的客户在ASP.NET Webforms 4.0应用程序中进行了"笔测试",并发现了许多他们希望我们修复的安全问题.
到目前为止引起讨论最多的一个是发现应用程序允许缓存页面和内容,这可能会导致未经授权的用户看到他们看不到的数据(这就是"笔测试"发现的内容,大致相同).
建议的"修复"是设置cache-control和pragmaHTTP标头,no-cache以避免这种缓存,通过添加到我的web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache, no-store, must-revalidate, private"/>
<add name="Pragma" value="no-cache"/>
<add name="Expires" value="-1"/>
</customHeaders>
</httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
但是我有点不愿意在全球范围内这样做 - 这不也会关闭应用程序的图像,Javascript和CSS文件的任何缓存吗?这可能会对网站性能产生重大负面影响 - 不是吗?
那么我可以在"介于两者之间"做些什么吗?使用它们提供的数据阻止实际的ASP.NET页面被高速缓存,但仍然保持静态内容的缓存?如果可能的话:我必须设置哪些标题来实现这一目标?
谢谢!
我在一个运行 HTTP/2 的站点上,我实现了以下缓存设置:
cache-control:max-age=604800, private
etag:W/"115-54e8a25e7b187"
expires:Fri, 14 Jul 2017 11:39:45 GMT
last-modified:Tue, 02 May 2017 13:02:11 GMT
Run Code Online (Sandbox Code Playgroud)
关于这个设置的一些问题:
如果我不指定public或private在指令中Cache-Control标头中默认行为是什么?它是否可以被代理服务器缓存?
所以我正在阅读这篇文章如何添加控制缓存
我认为最好的方法是通过.htaccess文件,但如果我添加它,它会在 create-react-app 上工作吗?我读过那个文件只在 Apache 上工作(我认为我们没有使用 Apache)——我不是一个 devops 人,也不是知道部署或服务器如何工作的人,所以我很难理解(我没有了解我们如何部署,另一个团队正在处理它:()。
那么,我如何正确地将它添加到 create-react-app 以便我可以缓存我的静态图像?
我在这里看到了几个相同的问题,但他们没有答案。
cache-control ×10
caching ×6
http ×2
javascript ×2
.htaccess ×1
asp.net-4.0 ×1
browser ×1
c ×1
deflate ×1
font-awesome ×1
http-caching ×1
http2 ×1
linkedin-api ×1
linux ×1
memory ×1
performance ×1
rest ×1
s-maxage ×1
webforms ×1