asp-classic - 浏览器似乎忽略了响应缓存控制指令

标签 asp-classic browser-cache http-caching

我正在尝试测试一些缓存配置,我希望我的页面在请求再次到达服务器之前在缓存中停留 1 分钟。

使用这个简单的 test.asp 页面,它有一个指向自身的链接:

<% Option Explicit %>
<%
    Response.Expires = 1
    Response.CacheControl = "private, max-age=60"
%>
<html>
<head><title>test</title></head>
<body>
<% =Now() %>
<br />
<a href="test.asp">test</a>
</body>
</html>

这在我的开发计算机上完美运行 http://localhost/test.asp ,(单击该链接不会在 1 分钟内刷新打印的日期时间)。

但是,当我将页面放在生产服务器上时,它并没有达到预期的效果。单击链接几秒钟后,我得到一个新的日期时间,这意味着请求已到达 Web 服务器。

我使用 Chrome 开发工具并看到这些响应 header :
HTTP/1.1 200 OK
Cache-Control: private, max-age=60
Content-Type: text/html
Expires: Tue, 12 May 2015 19:16:52 GMT
Last-Modified: Tue, 12 May 2015 19:10:00 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 12 May 2015 19:15:55 GMT
Content-Length: 205

任何人都可以帮助解释为什么它在 prod 服务器上不起作用?

更新
我尝试使用 Chrome、Firefox 和 IE,以及 2 个页面 test.asp 和 test2.asp,它们都有指向另一个页面的链接,但遇到了完全相同的问题,在 8-12 秒后,页面刷新而不是等待 60 秒在刷新之前。

最佳答案

跟进我的评论,看起来您可能正在考虑在服务器上缓存动态 asp 页面,而不是在客户端上。在客户端缓存并没有真正给您带来多大好处,因为现代浏览器/代理在其为 HTML 文档时仍会请求该项目。缓存不会改变的静态资源,如图像、css、js 应该可以工作,并且根据你推出的缓存头,浏览器会尊重这些。

要让您的页面缓存在服务器上(意味着 IIS 不必重新生成页面),您可以通过以下方式进行操作。

网页配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <caching>
            <profiles>
                <add extension=".asp" policy="CacheForTimePeriod" kernelCachePolicy="DontCache" duration="00:01:00" />
            </profiles>
        </caching>
    </system.webServer>
</configuration>

您可以将 web.config 放在特定目录中仅用于缓存其内容,您还可以使用查询字符串参数或某些请求 header 中断缓存。

关于asp-classic - 浏览器似乎忽略了响应缓存控制指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30200026/

相关文章:

iOS通过ASP上传图片到服务器

java - 缓存在 JAX-RS 中是如何工作的?

ios - If-None-Match 和 NSURLConnection

php - 使用 PHP 缓存 HTTP 文件

javascript - 使用 Javascript 服务器端编码从经典 ASP 返回 JSONP

asp-classic - ASP/GetRows & 计数

html - Firefox 刷新问题

JQuery.ajax(),缓存选项IE8

html - html 页面上的任何元标记是否会影响获取脚本、链接和任何其他资源的缓存策略?

javascript - 在我的本地机器上引用 javascript 文件