Речь идет о маршрутизации запросов приложений и динамическом отключении кэширования диска для определенных запросов (когда запросы поступают от аутентифицированных пользователей; аутентификация может быть определена с помощью специального кода).
В моей настройке есть сервер, на котором запущен ARR, отправляющий запросы на сайт ASP.NET MVC на другом сервере. Сайт использует аутентификацию форм (и иногда базовую аутентификацию HTTP), поэтому аутентификация происходит на сайте MVC, а не в ARR: по сути, когда пользователь проходит аутентификацию, сайт создает куки-файл аутентификации форм.
Я бы хотел, чтобы в ARR произошло следующее:
- Выполнять кэширование вывода для анонимных пользователей.
- Для аутентифицированных пользователей кэшируйте только статические файлы (например, файлы .css,, .js, .jpg) и не кэшируйте динамические страницы.
Как можно создать правило конфигурации кэша для этого сценария? Я пробовал несколько способов:
- Заголовки кэша: заголовки управления кэшем, отправленные приложением MVC, здесь непригодны, потому что представьте себе следующее: страница 1 находится в кэше ARR. Пользователь проходит аутентификацию и посещает страницу 1. Приложение MVC отправляет заголовок без кэша, но запрос до него не доходит, поэтому пользователь получает кэшированную версию.
- URL без кэширования: Я думал, что, вероятно, определение того, что URL с "no-arr-cache" в них не должны кэшироваться, будет работать с перезаписью URL, т. е. с пользовательским поставщиком URL Rewrite я бы переписал аутентифицированные запросы на ...?no-arr-cache. Помимо правил управления кэшем ARR, не заботящихся о строках запроса, проблема в том, что ARR учитывает только запрошенные URL, когда оценивается правило конфигурации кэша, а не перезаписанный URL.
Заранее спасибо!
Я перепостил это изФорумы ИИСпотому что там никто не ответил.
решение1
Вот как я это решил.
Мы должны иметь в виду следующие предпосылки:
- ARR идентифицирует кэшированные элементы по их URL-адресам (которые, в зависимости от конфигурации, включают строку запроса; это должна быть конфигурация).
- Во время запроса ARR может быть дано указание не кэшировать вывод текущего запроса.
- Если вывод текущего запроса (URL) был ранее кэширован, то я не знаю способа указать ARR не использовать кэшированную версию.
Основная идея заключается в том, чтобы изменить URL запроса или, скорее, переписать его по-другому с помощью IIS URL Rewrite в зависимости от того, аутентифицирован пользователь или нет. Неаутентифицированные пользователи получают все страницы, обслуживаемые, например, с помощью /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 для аутентифицированных и анонимных пользователей.
Надеюсь, это кому-нибудь поможет.