使用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.
完全有道理,这正是我需要的用例。
我们公司有一个经典的网站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.
完全有道理,这正是我需要的用例。