AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 562892
Accepted
Piedone
Piedone
Asked: 2013-12-22 05:10:43 +0800 CST2013-12-22 05:10:43 +0800 CST 2013-12-22 05:10:43 +0800 CST

ARR - 为某些请求动态禁用磁盘缓存(经过身份验证的用户)

  • 772

这是关于应用程序请求路由和动态禁用某些请求的磁盘缓存(请求来自经过身份验证的用户;它们是否经过身份验证可以由自定义代码决定)。

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

我希望在 ARR 中发生以下情况:

  • 为匿名用户做输出缓存。
  • 对于经过身份验证的用户,仅缓存静态文件(例如 .css、、.js、.jpg 文件),不缓存动态页面。

这种情况下怎么可能有缓存配置规则呢?我尝试了多种方法:

  • 缓存头:MVC 应用程序发送的缓存控制头在这里不可用,因为想象一下:第 1 页在 ARR 的缓存中。用户验证并访问页面 1。MVC 应用程序将发送一个 no-cache 标头,但请求未到达它,因此用户获取缓存版本。
  • 无缓存 URL:尽管我可能定义了不应缓存其中包含“no-arr-cache”的 URL 将与 URL 重写一起使用,即使用自定义 URL 重写提供程序我会将经过身份验证的请求重写为...?无 arr 缓存。除了不关心查询字符串的 ARR 缓存控制规则之外,问题在于 ARR 在评估缓存配置规则时只考虑请求的 URL,而不是重写的 URL。

先感谢您!

我从IIS 论坛交叉发布了这个,因为那里没有人回复。

cache
  • 2 2 个回答
  • 5510 Views

2 个回答

  • Voted
  1. Best Answer
    Piedone
    2013-12-28T14:22:11+08:002013-12-28T14:22:11+08:00

    这就是我解决它的方法。

    我们必须牢记以下前提:

    • ARR 使用其 URL 标识缓存项(根据配置,包括查询字符串;这应该是配置)。
    • 在请求期间,可以指示 ARR 不缓存当前请求的输出。
    • 如果当前请求的(URL)输出之前被缓存,那么我不知道如何指示 ARR 不要使用缓存的版本。

    最重要的想法是更改请求的 URL,或者更确切地说,根据用户是否经过身份验证,使用 IIS URL 重写以不同方式重写它。未经身份验证的用户使用 /my-page?authenticated=false 获取所有页面,使用 /my-page?authenticated=true 获取经过身份验证的页面。页面将仅为匿名用户缓存,因此 ARR 不会为经过身份验证的用户找到任何匹配的缓存条目。这样,第三点就解决了。不利的一面是,附加到 URL 的查询字符串可能会出现在 HTML 正文中,应该使用 IIS URL Rewrite 去除这些字符串。

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

    您可以通过 IIS URL Rewrite IRewriteProvider 检测用户是否经过身份验证(请参阅教程),即您可以使用此类提供程序的输出为经过身份验证的用户和匿名用户以不同的方式重写 URL。

    希望对某人有所帮助。

    • 1
  2. Randy Nghiem
    2015-01-31T00:52:22+08:002015-01-31T00:52:22+08:00

    配置 Cache-control 仅适用于 HTTP/1.1,要禁用旧 IE 浏览器的缓存,您需要配置

    • 缓存控制:无缓存
    • Pragma:无缓存

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

    • 0

相关问题

  • 缩放大文件下载?

  • Gzip 与反向代理缓存

  • 如何禁用tomcat缓存?我遇到了奇怪的静态文件问题

  • mod_mem_cache 提供错误的内容!

  • NFS 缓存导致间歇性滞后

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve