We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
对于静态文件,IIS 自己会处理缓存相关事宜,无需手动配置。
关键词:iis 8 cache。
iis 8 cache
官方文档:Caching 。
相关讨论:Browser Caching using IIS8.5, am I doing it right?
查看 IIS 的 输出缓存 部分,发现只能给每种文件扩展名添加缓存,没法给指定目录添加缓存。
输出缓存
然后缓存分为两种:用户模式缓存和内核模式缓存。
Google iis user-mode caching vs kernel-mode caching 之后,看到这篇解释:difference between kernel mode and user mode caching in IIS 8.0。简单来说,内核模式缓存会直达最基础的系统层面,不会触及 IIS 和 ASP.NET,所以 IIS 相关的验证/授权和其他设置都无法应用到内核模式缓存上。但是从另一个方面来看,内核模式缓存肯定是更快的。
iis user-mode caching vs kernel-mode caching
至于具体什么情况下内核模式缓存无效,可以查看 MSDN 上的这篇文档:Instances in which HTTP.sys doesn't cache content。
一种方式是 文件更改通知,文件如果没有变化,缓存就不更新。
文件更改通知
另一种方式是 时间间隔,也就是指定时间之后缓存失效。
时间间隔
另外对于 用户模式缓存 来说,还可以根据 查询字符串变量 和 HTTP 标头 来缓存文件的多个版本,这个后面有空了再深入研究一下。
用户模式缓存
查询字符串变量
HTTP 标头
最开始添加的是内核模式缓存,然后在浏览器中调试页面,取消“跳过缓存”选项,发现刷新之后服务端返回的还是更改前的页面。
于是又给所有文件类型再添加用户模式缓存,然后再刷新页面,这回浏览器终于可以在不刷新缓存的情况下,拿到更新后的页面了,查看 Etag 字段也是更新了的,看来还是得用户模式缓存才行,或者是两种缓存都启用。
Etag
上图中官方文档说不建议给静态文件设置缓存,那怎么让 IIS 在静态文件在修改后及时返回最新的文件呢?
之后在 IIS 的缓存设置中,配置 .html 在两种模式下都不缓存,然后修改页面,并在浏览器中不跳过缓存地刷新页面,结果也能看到修改后的页面。
.html
然后在官方文档 When to Use Output Caching | Configure IIS 7 Output Caching 中,看到了下面这段话:
也就是说静态内容 IIS 自己会缓存,也会刷新修改后的缓存。于是在 IIS 中把所有静态文件的缓存设置都删除,然后重启 IIS 根节点,并修改 HTML 页面里的内容。每次修改后都用微信扫码,结果真的显示的是最新的内容!
这么说的话,之前的缓存设置其实是没有必要的?那就先把静态文件的缓存设置删掉,以后再看情况决定是否再启用。
旧的记录:
The text was updated successfully, but these errors were encountered:
No branches or pull requests
最终结论
对于静态文件,IIS 自己会处理缓存相关事宜,无需手动配置。
初始研究
关键词:
iis 8 cache
。官方文档:Caching 。
相关讨论:Browser Caching using IIS8.5, am I doing it right?
深入研究
添加缓存的方式
查看 IIS 的
输出缓存
部分,发现只能给每种文件扩展名添加缓存,没法给指定目录添加缓存。两种缓存分类
然后缓存分为两种:用户模式缓存和内核模式缓存。
Google
iis user-mode caching vs kernel-mode caching
之后,看到这篇解释:difference between kernel mode and user mode caching in IIS 8.0。简单来说,内核模式缓存会直达最基础的系统层面,不会触及 IIS 和 ASP.NET,所以 IIS 相关的验证/授权和其他设置都无法应用到内核模式缓存上。但是从另一个方面来看,内核模式缓存肯定是更快的。至于具体什么情况下内核模式缓存无效,可以查看 MSDN 上的这篇文档:Instances in which HTTP.sys doesn't cache content。
缓存过期方式
一种方式是
文件更改通知
,文件如果没有变化,缓存就不更新。另一种方式是
时间间隔
,也就是指定时间之后缓存失效。另外对于
用户模式缓存
来说,还可以根据查询字符串变量
和HTTP 标头
来缓存文件的多个版本,这个后面有空了再深入研究一下。添加的缓存类型
实际应用
最开始添加的是内核模式缓存,然后在浏览器中调试页面,取消“跳过缓存”选项,发现刷新之后服务端返回的还是更改前的页面。
于是又给所有文件类型再添加用户模式缓存,然后再刷新页面,这回浏览器终于可以在不刷新缓存的情况下,拿到更新后的页面了,查看
Etag
字段也是更新了的,看来还是得用户模式缓存才行,或者是两种缓存都启用。问题探讨
上图中官方文档说不建议给静态文件设置缓存,那怎么让 IIS 在静态文件在修改后及时返回最新的文件呢?
之后在 IIS 的缓存设置中,配置
.html
在两种模式下都不缓存,然后修改页面,并在浏览器中不跳过缓存地刷新页面,结果也能看到修改后的页面。然后在官方文档 When to Use Output Caching | Configure IIS 7 Output Caching 中,看到了下面这段话:
也就是说静态内容 IIS 自己会缓存,也会刷新修改后的缓存。于是在 IIS 中把所有静态文件的缓存设置都删除,然后重启 IIS 根节点,并修改 HTML 页面里的内容。每次修改后都用微信扫码,结果真的显示的是最新的内容!
这么说的话,之前的缓存设置其实是没有必要的?那就先把静态文件的缓存设置删掉,以后再看情况决定是否再启用。
旧的记录:
The text was updated successfully, but these errors were encountered: