IIS7.5 Ongyscachemodule Kernel кэширует «публичный» игнорирующий URL

StackOverflow https://stackoverflow.com/questions/4642652

Вопрос

Имейте какое-то странное поведение в отношении выходной кэширования в приложении ASP.NET 4 на IIS 7.5. Я смог повторить проблему просто на других пустых установках, я уверен, что это ошибка, но не уверена, как сообщить об этом Microsoft.

Сайт в IIS реагирует на более 1 домена, приложение .NET проверяет имя хоста и дает контент соответственно. Например, он может распечатать имя URL-адреса запроса на пустой странице. Например, www.first-domain.com, и www.second-domain.com

Web.config имеет соответствующую кэширование, URLCompression и httpCompression все выключенные под узлом System.WebServer.

Страница ASPX устанавливает заголовок Cache-Control для общественности, либо на будущую дату для истечения истечения или значение максимального возраста.

Посещение www.first-domain.com выводит страницу, которая успешно пишет www.first-domain.com '.

Однако посещение www.second-domain.com выводит страницу, которая пишет www.first-domain.com '.

Исследование неисправностей-запрос-следов, System.Web.caching.Outputcachemodule нашла кэшированный выход (даже если файлы .Config повернули функцию выключенного), кэш совпадал, даже если имя хоста URL-адреса запроса разные, и, следовательно, Второй запрос выводится результаты первого запроса на другой домен, пока установлен максимальный возраст / срок действия, прежде чем появится правильная страница для второго домена.

Либо установка Cache-Control для частного или удаления модуля «OutputCache» в Web.config решает проблему, сохраняя при сохранении правильных заголовков Cache-Control, отправленных в браузер, но, очевидно, я не могу воспользоваться кешированием ядра, когда Мне это надо.

Я не могу найти какую-либо документацию MSDN о том, как настроена выводкаCachemodule.

Кто-нибудь еще испытывал этот вопрос, как я могу включить кэширование ядра и позволить ему учитывать имя хоста URL (без разделения приложения на разные сайты в IIS).

Спасибо.

Обновлять:

Добавление SetSlidingExpiration не имеет никакого эффекта, так как кэш ядра все еще кэширует вывод независимо от права хоста запроса. Единственный сценарий сейчас - либо отключить выходную кэширование, либо запускать дубликат экземпляра приложения на каждом домене, он будет работать - с учетом выпуска сервера, это приведет к повышению производительности, полученного в использовании выходных кэширования, мы решили Чтобы отключить выходное кэширование для этого приложения.

Это было полезно?

Решение

После 9 месяцев нет ответа, и никакого решения не было найдено, только обходной путь, возможно, это будет исправлено в следующей версии IIS более 7,5 ...

--

Добавление SetSlidingExpiration не имеет никакого эффекта, так как кэш ядра все еще кэширует вывод независимо от права хоста запроса. Единственный сценарий сейчас - либо отключить выходную кэширование, либо запускать дубликат экземпляра приложения на каждом домене, он будет работать - с учетом выпуска сервера, это приведет к повышению производительности, полученного в использовании выходных кэширования, мы решили Чтобы отключить выходное кэширование для этого приложения.

Другие советы

У меня была очень похожая проблема, и никаких решений здесь не помогло.

TLDR: Насильно удалить OutputCache модуль на Web.config было единственное решение, которое я нашел.

Мой сценарий был немного другим.

У меня есть CORS, установленные в Application_BeginRequest, отвечая Access-Control-Allow-Origin для определенных хозяев, которые называют меня (установка его * не был надежен).

Мой контроллер также устанавливает Cache-control: public для это ответов.

Что я обнаружил

Всякий раз, когда я установил Cache-control: public, IIS насильно кэширует ответ. Точка останова любой Application_BeginRequest или мой контроллер никогда не ударил второй раз.

Отключение вывода и кэширования ядра через менеджер IIS, как видно ниже у меня будет ударить Application_BeginRequest точки останова, но никогда не забрал меня в контроллер. Что-то все еще кэшировало ответы.disabled output caching and kernel caching on inetmgr

эта статья Предлагаемое удаление модуля вывода данных из IIS поможет.

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <remove name="OutputCache" />
  </modules>
</system.webServer>

Это позволило мне ударить моим контроллером, наконец.

Что бы помочь еще больше

Если кто-то из MS или не мог светить свет, есть ли способ изменить это поведение. Outputcache может быть полезен в некоторых частях приложения и ненужных в других.

Остерегаться

Может быть, я (мы?) Решит неправильную проблему здесь.

Возможно, IIS пробил кэширование в этом сценарии, потому что он должен. Возможно, прокси по пути между моим сервером, и пользователь ведет себя так же, как это точный сценарий, и если это так, то работая вокруг этого на IIS неверно. Я должен понять это, и, возможно, вы тоже должны.

У меня есть подобная проблема. Я использую пользовательский Rewriter URL. У меня есть страницы example.com/articles и example.com/art-any_id.html. Оба URL-адреса на Статьи.aspx (во втором примере как Starl.aspx? Id = any_id). Он работал нормально с режимом ASP.NET 2.0 и Classic Pipeline. После того, как мы изменили его в ASP.NET 4 и встроенный режим, у нас есть странное поведение: оба возврата URL идентично вывод. Это была какая-либо страница, такая как example.com/art-any_id.html.

Теперь мы удалили <add extension=".html" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" /> из раздела <caching enabled="true" enableKernelCache="true"> И это хорошо работает. Я не понимаю, почему http.sys кэширует это.

Вы находили какие-либо объяснения?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top