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

Asp classic 浏览器似乎忽略了响应缓存控制指令,asp-classic,browser-cache,http-caching,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>

我正在尝试测试一些缓存配置,我希望我的页面在请求再次到达服务器之前在缓存中停留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>
有人能解释为什么它不能在prod服务器上工作吗

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

要跟进我的评论,您可能正在服务器上缓存动态asp页面,不是在客户机上。客户机上的缓存实际上对您没有多大好处,因为现代浏览器/代理仍然会在它是HTML文档时请求该项。缓存不会改变的静态资源,如图像、css、js应该可以工作,根据您推出的缓存头,浏览器将尊重这些资源

要将页面缓存到服务器上(意味着IIS不必重新生成页面),下面是您的操作方法

Web.config

<?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放在特定目录中,仅用于缓存其内容,也可以使用querystring参数或某些请求头来中断缓存

你是如何测试的?是否在同一选项卡中刷新?这可能是一个chrome问题:它在您的开发环境中工作的原因可能是chrome对“localhost”url做了一些奇怪的事情。我通过单击测试页面中链接到自身的超链接进行测试。使用刷新按钮总是将请求发送到符合逻辑的服务器。我会尝试其他浏览器,也可能不止一个页面。太好了!现在,我刚刚启动了一个悬赏并再次尝试了相同的代码,问题就神奇地消失了,见鬼:|当你在浏览器上刷新时,通常的行为是整个页面将重新加载html内容。我想您正在寻找IIS输出缓存来缓存服务器上的页面?您确定示例响应头属于asp响应吗?我这样问是因为有一个
上次修改的
,它是一个静态内容头,无法从asp发送。您是手动添加的吗?我无法轻松使用IIS输出缓存,因为它是私有缓存(页面内容因每个用户而异)。你说:“客户端上的缓存对你没有多大好处,因为现代浏览器/代理仍然会在它是HTML文档时请求该项目。”你能解释更多吗?如果客户端缓存响应头设置正确,浏览器为什么会请求服务器?您可以使用iis输出缓存并按参数变化,也可以按asp脚本中发送给自己的不同头值变化,也可以按ip地址变化。但是,如果您的页面非常不同,那么IIS上的输出缓存将消耗资源,因为内存中每个页面的版本都太多>对于我之前的评论,我唯一得到from缓存响应的时间是静态项(图像、js、css)。对于内容类型html,chrome似乎总是请求页面。我不知道为什么,我在Nginx和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>