ARR – dynamic禁用某些请求(authentication用户)的磁盘caching

这是关于应用程序请求路由和dynamic禁用磁盘caching某些请求(其中请求来自已authentication的用户;他们是否通过身份validation可以由自定义代码决定)。

在我的设置中,有一台运行ARR的服务器,将请求分派到另一台服务器上的ASP.NET MVC站点。 该站点使用表单身份validation(有时是HTTP基本身份validation),因此身份validation发生在MVC站点上,而不是ARR中:基本上,当用户validation站点时,会创build一个表单身份validationcookie。

我想在ARR中发生以下情况:

  • 为匿名用户输出caching。
  • 对于经过身份validation的用户,只会caching静态文件(例如.css,.js,.jpg文件),而不会cachingdynamic页面。

如何为这个场景设置cachingconfiguration规则? 我已经尝试了多种方式:

  • 高速caching头:由MVC应用程序发送的高速caching控制头在这里是不可用的,因为想象一下:页1在ARR的高速caching中。 用户authentication和访问页面1. MVC应用程序将发送一个无caching头,但请求没有达到它,所以用户获得caching版本。
  • 没有caching的url:我虽然可能定义的url与“no-arr-cache”不应该被caching将工作与URL重写,即与自定义url重写提供程序我会重写已validation的请求…?无ARRcaching。 除了ARRcaching控制规则不关心查询string之外,问题是ARR只在计算cachingconfiguration规则时考虑请求的URL,而不是重写的URL。

先谢谢你!

我从IIS论坛交叉发布这个消息,因为没有人回答。

这就是我解决它的方法。

我们必须牢记以下的前提:

  • ARR用它们的URL标识高速caching的项目(根据configuration,包括查询string;这应该是configuration)。
  • 在请求期间,可以指示ARR不caching当前请求的输出。
  • 如果当前请求的(URL)输出caching之前,那么我不知道指示ARR不要使用caching版本。

最大的想法是更改请求的URL,或者更确切地说,根据用户是否进行身份validation,使用IIS URL重写进行重写。 未经身份validation的用户将获得与eg / my-page一起提供的所有页面?authenticated = false和经过身份validation的用/ my-page?authenticated = true的页面。 只有匿名用户才会caching页面,所以ARR不会为经过身份validation的用户find任何匹配的caching条目。 因此,第三点就解决了。 缺点是附加到URL的查询string可能出现在HTML正文中,应使用IIS URL重写将其删除。

要指示ARR不caching当前请求,请将ARR_CACHE_CONTROL_OVERRIDE服务器variables设置为“1,no-cache”(您可以通过重写规则执行此操作)。

您可以检测用户是否通过IIS URL重写IRewriteProvider进行身份validation(请参阅教程 ),即您可以使用此类提供程序的输出为经过身份validation的用户和匿名用户重新编写URL。

希望能帮助别人。

configurationcaching控制只适用于HTTP / 1.1,为了禁止旧IE浏览器的caching,你需要configuration

  • caching控制:无caching
  • Pragma:no-cache

以下文章提供了更多详细信息: 禁用ARR中的caching