使用Querystring参数调用的经典ASP页面是否由HTTP级别的内核缓存缓存?

时间:2018-01-24 16:44:48

标签: caching iis asp-classic iis-8

我们公司有一个用经典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秒)?

非常感谢,

1 个答案:

答案 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不会缓存请求响应:

     

...

     
      
  • 请求包含查询字符串。
  •   

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