IIS 7.5 удаляет заголовки etag из ответа

Я знаю, что этот вопрос задавали много раз, однако большинство из них были в 2009-2010 годах.

Я уверен, что некоторое время назад проект, над которым я работал, удалил их, однако я не могу найти способ удалить их на данный момент.

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

В настоящее время пробовали:

  • Добавление пустого заголовка etag в web.config
  • Добавление etag с кавычками внутри web.config
  • Добавление пустого заголовка etag непосредственно через IIS
  • Добавление настраиваемого модуля, который удаляет etag на BeginResponse
  • То же, что и выше, но для EndResponse
  • Как и выше, но вместо удаления этага, сделайте его пустым

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

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

У меня также есть система управления версиями, поэтому, когда происходит изменение, статическое содержимое затем ссылается на my.js? 12345, а не my.js? 12344. В любом случае, я считаю, что удаление Etags значительно улучшит одно из узких мест в моем текущем проекте.

Ответ 1

Вы можете использовать IIS Rewrite Module 2.0, чтобы удалить ETag. Следующее правило перезаписи должно сделать это:

<rewrite>
   <outboundRules>
      <rule name="Remove ETag">
         <match serverVariable="RESPONSE_ETag" pattern=".+" />
         <action type="Rewrite" value="" />
      </rule>
   </outboundRules>
</rewrite>

Вы можете увидеть пример образа конфигурации правил в диспетчере IIS в моем блоге.

Ответ 2

Для тех из вас, кто сталкивается с этим ответом в поисках того же решения, но для IIS 8 или IIS 8.5, вот что я придумал. Спасибо этот пост на blogs.iis.net за то, что указали мне в правильном направлении.

Ссылка: clientCache на веб-сайте документации IIS.

В вашем web.config добавьте:

<configuration>
    ...
    <system.webServer>
    ...
        <staticContent>
            <clientCache setEtag="false"/>
        </staticContent>
    ...
    </system.webServer>
    ...
</configuration>