IIS 7/7.5 304(未修改)是否涉及磁盘 IO?

IIS 7/7.5 304(未修改)是否涉及磁盘 IO?

我想知道 IIS(7/7.5)如何处理 304((未修改)响应代码)。例如,当图像缓存在客户端(即 Web 浏览器)上,并且设置了 Last-Modified HTTP 标头时,IIS 是否需要实际检查物理图像文件是否确实已更新?如果有很多图像,即使图像缓存在客户端,此磁盘 IO 活动也可能成为瓶颈。Last-Modified 将节省通过网络传输的数据,但不会节省服务器磁盘 IO。

同样的问题也适用于 HTTP ETag。我认为 IIS 需要计算“内容哈希”,以便浏览器可以确定是否获取更新的页面或仅使用浏览器缓存。

谢谢。

答案1

确实需要磁盘访问,至少为了检查图像是否存在(即应该发送 304 而不是 404)。

答案2

摘录自w3.org,对于 IIS 来说也是如此。

If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields.

由于标头值没有改变,IIS 不需要 GET 该文件,因此不应该有任何 IO。如果标头值不一致,则只会有 GET,然后是 IO。

编辑:添加内容过期

如果您的网站上有时间敏感信息,您可以配置设置以确保代理或 Web 浏览器不会缓存过时的信息。您可以将网站内容配置为随时自动过期。启用内容过期后,Web 浏览器会将当前日期与过期日期进行比较,以确定是显示缓存页面还是从服务器请求更新的页面。可以使用服务器端技术(例如 Microsoft ASP.NET)来动态更改所提供的内容。通常,时间敏感信息仅限于单个文件、目录或网站;但是,您也可以为计算机上的所有网站设置内容过期。

Fiddler trace 也可以帮助理解这个概念。

相关内容