我们公司有一个用经典ASP制作的网站,大多数是静态网页。 我们在 web.config 文件中启用了Kernal缓存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
我们的问题如下:您是否确认此动态网页永远不会为其他用户缓存,因为它始终有不同的网址(基于 userId < / em>参数)?
我们需要确保 userId = 12345 绝不会看到 userID = 56789 的缓存信息,即使他们访问同一个网站的“user.asp”页面也是如此缓存时间表(30秒)?
非常感谢,
答案 0 :(得分:1)
是,varyByQueryString="*"
将为每个查询字符串保留单独的缓存副本。 (你可以尝试自己确定)
请注意,任何用户都可以将URL和欺骗更改为其他用户。这不是一个好的认证机制。
@AlexLaforge编辑: 这个答案绝对是真实! IIS中的内核缓存需要请求资源满足的几个条件才能进行缓存。其中一个条件是它不应包含任何查询字符串。您可以在此处的Microsoft知识库中查看它:
https://support.microsoft.com/en-us/help/817445/instances-in-which-http-sys-does-not-cache-content
如果满足下列一个或多个条件,则HTTP.sys不会缓存请求响应:
...
- 请求包含查询字符串。
这完全有道理,这正是我需要的用例。