我的IIS7 web.config设置为以下静态资源文件夹(不在ASP.NET应用程序或任何内容中):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="500.00:00:00" />
</staticContent>
<httpProtocol allowKeepAlive="false" />
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
当我尝试访问Silverlight .XAP文件时,我希望IIS告诉浏览器它可以缓存500天.
但是,这是缓存头:
Cache-Control: no-cache,public,max-age=43200000
为什么IIS仍然no-cache使用上述配置文件添加到此标头?
此 PHP 代码为 xml 文件生成 eTag。问题是 eTag 仅当文件本身更新/修改时才会更新。当动态结果更新时,我也需要更新 etag。知道如何做到这一点吗?
//get the last-modified-date of this very file
$lastModified=filemtime(__FILE__);
//get a unique hash of this file (etag)
$etagFile = md5_file(__FILE__);
//get the HTTP_IF_MODIFIED_SINCE header if set
$ifModifiedSince=(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
//get the HTTP_IF_NONE_MATCH header if set (etag: unique file hash)
$etagHeader=(isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);
//set last-modified header
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $lastModified)." GMT");
//set etag-header
header("Etag: $etagFile");
//make sure caching is turned on
//check if page has changed. …Run Code Online (Sandbox Code Playgroud) 我在加载视频时遇到问题 - 它们都返回 206(部分内容)响应。我想在 100% 完成时触发一个事件,但还没有实现。
这是我在检查器中得到的信息:
响应头
Accept-Ranges:bytes
Accept-Ranges:bytes
Connection:keep-alive
Content-Length:12465963
Content-Length:12465963
Content-Range:bytes 0-12465962/12465963
Content-Type:video/mp4
Date:Wed, 01 Apr 2015 00:26:29 GMT
ETag:"6f23fd3-be372b-51239e2090e70"
Host-Header:192fc2e7e50945beb8231a492d6a8024
Last-Modified:Fri, 27 Mar 2015 00:04:58 GMT
Server:Apache
X-Cache:SGCACHE-MISS
X-Forwarded-For:189.135.253.115
Run Code Online (Sandbox Code Playgroud)
请求标头
Accept:*/*
Accept-Encoding:identity;q=1, *;q=0
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Cookie:PHPSESSID=ml8n0hh37na09ggjcvvbeld383; key=76626f47b940e09d3601920b684befc62d703fd5%2Bda9d8d1ede4727d1486ac7274487ffa8994d18f3%7C1427415309%7Ce2fa179955ca0ce759d4ba10c1227e825bba261f%7CZGV2YWRtaW4%3D
DNT:1
Host:[xxxxx]
Pragma:no-cache
Range:bytes=0-
Referer:[xxxxx]
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.104 Safari/537.36
Run Code Online (Sandbox Code Playgroud)
我看到了这个:Content-Range:bytes 0-12465962/12465963- 并注意到它已经加载了除最后一个字节之外的所有字节。
次要问题:我也看到了Cache-Control:no-cache。我正在加载的视频并不大,最好将它们保留在缓存中一小段时间。
我对标题之类的东西一无所知。这是怎么回事?
具体来说,URL的哪些部分用于比较。假设我在提供CSS样式表https://www.example.com/a/b/test.css与相应的HTTP报头cache-control,max-age等当用户进入到每个以下URL后,该人将担任缓存文件?
https://www.example.com/a/b/test.css
https://www.example.com/a/b/test.css?abc=123
https://www.example.com/a/b/test.css#abc=124
Run Code Online (Sandbox Code Playgroud)
基本上,我要问的是,当浏览器决定是否使用缓存的资源时,是否比较URL字符串的“搜索”和“哈希”部分。此外,这种比较逻辑在浏览器之间是否是一致的,还是某些标准的一部分?
服务工作者缓存是否支持缓存控制头?例如,如果缓存中的条目具有标题cache-control: no-store或者cache-control: max-age=60这些条目是否受到尊重match()?
CACHE HIT尽管cache-control: no-store响应中出现标题,但以下代码仍会输出.(我认为同样的问题适用于max-age.)
function warm(c) {
var req = new Request("/foo.txt");
var res = new Response("hello", {
status: 200,
statusText: "OK",
headers: new Headers({
"cache-control": "no-store",
"content-type": "text/plain"
})
});
return c.put(req, res).then(function () { return c; });
}
function lookup(c) {
return c.match(new Request("/foo.txt")).then(function (r) {
return r ? "CACHE HIT" : "CACHE MISS";
});
}
function deleteAllCaches() {
return caches.keys().then(function (cacheNames) {
return Promise.all( …Run Code Online (Sandbox Code Playgroud) 几天前我设置了一个 Azure Verizon Premium CDN,如下所示:
来源:Azure web 应用程序(.NET MVC 5 网站)
设置:自定义域,无地理过滤
缓存规则:标准缓存(不关心参数)
压缩:启用
优化:动态站点加速
协议:HTTP、HTTPS ,自定义域 HTTPS
规则:通过规则引擎强制 HTTPS(如果请求方案 = http,301 重定向到 https://{customdomain}/$1)
所以 - 这个 CDN 现在已经运行了几天,但是 ADN 报告说几乎 100% (99.36%) 的缓存状态是“CONFIG_NOCACHE”(描述:“对象被配置为从不按照位于边缘服务器上的客户特定配置,因此响应是通过源服务器提供的。”)其中一些(0.64%)是“无”(描述:“针对此请求完全绕过缓存。例如,请求立即被令牌身份验证模块拒绝,或者客户端请求方法使用了不可缓存的请求方法,例如“PUT”。)此外,在“缓存命中”报告中,它表示“0 命中,0 未命中”对于每个日。没有任何东西通过“HTTP Large”端,只有“ADN”。
我在四处搜索时找不到这些确切的消息,但我已经尝试过:
当我第一次使用 Apollo 为每次获取处理 GraphQl API 时,只有 Apollo 从服务器获取,其他总是从本地缓存获取
let apollo = ApolloClient(url: URL(string: graphQLEndpoint)!)
let meetingsQuery = AllMeetingsQuery()
apollo.fetch(query: meetingsQuery) { [weak self] result, error in
guard let meetings = result?.data?.allMeetings else { return }
print(conferences.count)
self?.conferences = conferences.map {$0.fragments.meetingDetails }
}
Run Code Online (Sandbox Code Playgroud) 我正在努力加速我网站上的活动.YSlow警告我,我的图片缺少过期标题.但是我如何在图像上应用这样的标题?
我的应用程序基于zend框架.图像存储在文件夹中的图像,我怎样才能为它们设置过期标题?
这已经困扰了我一个星期了.好吧,我非常需要在用户成功登录后清除登录页面的缓存,并防止用户在按下后退按钮后退出后查看上一页.我尝试在codeigniter中添加此代码(索引页面和登录页面),但仍然没有任何反应
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Pragma: no-cache");
Run Code Online (Sandbox Code Playgroud)
以及这一个:
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="01 Jan 1970 00:00:00 GMT">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
Run Code Online (Sandbox Code Playgroud)
我已经在考虑在后台运行的同步任务来检查会话但是我在AJAX中并不是那么好.那么我想要的就是让它像使用轨道上的红宝石一样简单Cache-Control: no-cache.顺便说一下,我也没有关于ruby的知识,但看到代码让我想知道为什么在codeigniter中没有像这样的简单解决方案?解决这个问题的任何解决方案?
此页面上Cache-Control指定以下内容:
标准Cache-Control指令,可由客户端在HTTP请求中使用.
我以为只有服务器发回有关客户端是否应该缓存响应的信息.为什么客户端会向服务器发送缓存信息?
cache-control ×10
caching ×3
php ×3
http-headers ×2
javascript ×2
apache ×1
apollo ×1
azure ×1
azure-cdn ×1
browser ×1
cdn ×1
codeigniter ×1
etag ×1
graphql ×1
iis-7 ×1
ios ×1
silverlight ×1
swift ×1
video ×1
xml ×1
zend-cache ×1