我们有一个相当高流量的静态站点(即没有服务器代码),有很多图像,脚本,css,由IIS 7.0托管
我们希望启用一些缓存以减少服务器负载,并考虑将Web内容的到期时间设置为将来某个时间。在IIS中,我们可以通过IIS响应头模块中常见http头的“Expire web content”部分在全局级别执行此操作。也许将内容设置为在服务后7天到期。
所有这些实际上都是设置max-age
HTTP响应标头,据我所知,这是有意义的,我想。
现在,困惑:
首先,我检查过的所有浏览器(IE9,Chrome,FF4)似乎都忽略了这一点,并且仍向服务器发出条件请求以查看内容是否已更改。那么,我不完全确定max-age响应头会实际影响什么?!它可能是旧浏览器吗?还是网络缓存?
我们可能希望在短时间内更改网站中的图片...我猜测如果max-age 实际上被某些内容使用了,就其本质而言,它不会检查这张图片是否已经改变了7天......所以这不是我们想要的
我想知道最好的做法是将一个网站划分为内容文件夹真的不会经常更改,只打开这些文件夹的一些长期过期?也许改变查询字符串以强制刷新这些文件夹中的内容(例如/assets/images/background.png?version=2)?
无论如何,看过(相当干燥的!)HTTP specification以及tutorials中的一些,我仍然没有真正意识到我们的情况是正确的。
任何与我们类似的情况的真实体验都将非常感激!
答案 0 :(得分:1)
浏览器首先获取HTML,然后获取内部的所有资源(css,javascript,images等)。
如果你让HTML很快过期(例如1小时或1天),然后让其他资源在1年后过期,你可以充分利用这两个世界。
当您需要更新图像或其他资源时,您只需更改该文件的名称,并更新HTML以匹配。
下次用户获取新的HTML时,浏览器会看到该图片的新网址,并获取新的内容,同时从缓存中获取所有其他资源。
此外,在撰写本文时(2015年12月),Firefox将服务器的最大并发连接数限制为六(6)。这意味着如果您拥有30个或更多资源,这些资源全部托管在同一个网站上,则在加载页面之前,只有6个资源可以随时下载。您可以通过使用内容分发网络(CDN)来加快速度,以便一次性下载所有内容。