使用Querystring参数调用的Classic ASP页面是否被HTTP级Kernel缓存缓存?

Does Classic ASP pages called with Querystring parameters are cached by the HTTP-level Kernel cache?

我们公司有一个经典的网站ASP,大部分是静态页面。 我们在 web.config 文件中启用了 30 秒的内核缓存,以加快我们所有网页的显示速度:

<caching enabled="true" enableKernelCache="true" maxCacheSize="512" maxResponseSize="524288">
    <profiles>
        <add extension="*" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" varyByQueryString="*" varyByHeaders="accept-encoding, accept-language" location="Server" duration="00:00:30"/>
    </profiles>
</caching>

我们有一个显示客户信息的动态页面: 本页根据Request.Querystring("userId")参数显示信息:

示例。 https://website.com/user.asp?userId=12345

我们的问题如下:你能确认这个动态页面 永远不会为其他用户缓存 ,因为它总是有一个不同的 URL (基于 userId 参数) ?

我们需要确保 userId=12345 永远不会看到 userID=56789 的缓存信息,即使他们访问 "user.asp" 同一缓存时间范围内的页面(30 秒)?

非常感谢,

是的,varyByQueryString="*"将为每个查询字符串保留单独的缓存副本。 (你可以自己试一下确定)

请注意,任何用户都可以更改 URL 并伪装成其他用户。这不是一个好的认证机制。


@AlexLaforge 编辑: 这个答案绝对正确! IIS 中的内核缓存需要被请求的资源满足几个条件才能被缓存。其中一个条件是它不应包含任何查询字符串。您可以在此处的 Microsoft 知识库中查看它:

https://support.microsoft.com/en-us/help/817445/instances-in-which-http-sys-does-not-cache-content

if one or more of the following conditions are true, HTTP.sys does not cache the request response:

....

  • The request contains a query string.

完全有道理,这正是我需要的用例。