IIS 7.5 удалить заголовки etag из ответа - PullRequest
27 голосов
/ 30 октября 2011

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

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

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

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

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

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

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

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

Ответы [ 2 ]

53 голосов
/ 11 ноября 2011

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

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

Пример изображения конфигурации правила в IIS Manager можно посмотреть в моем блоге .

12 голосов
/ 07 ноября 2014

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

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

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

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