高性能Webサイトに対するYahooのベストプラクティス 、ヘッダーからEtagを削除したい(すべてのキャッシュを手動で管理しており、Etagを必要としない...およびwhen/if農場にスケールする必要があります、私は本当に彼らがいなくなって欲しいです)。 Windows Server 2008でIIS7を実行しています。これを行う方法を知っている人はいますか?
IIS7では、Etag変更番号(Etagの次の部分:)は常に0に設定されます。
したがって、サーバーからのEtagが同じファイルに対してサーバー間で異なることはなくなり、したがって、Yahooのベストプラクティスは実際には適用されなくなりました。
実際にIIS7でETagヘッダーを抑制することはできないので、おそらくそれをまったくいじらないことをお勧めします。最も有用な構成ルールは、「デフォルトで問題が発生しない場合はそのままにしておく」ことです。
Web.configでこれを行うと、IIS7でETagを無効にできると思うでしょう。しかし、スニファートレースは、とにかくETagが送信されることを確認します。
<httpProtocol>
<customHeaders>
<remove name="ETag" />
</customHeaders>
</httpProtocol>
空白を使用しても機能しません。とにかくETagは送信されます。
<httpProtocol>
<customHeaders>
<add name="ETag" value="" />
</customHeaders>
</httpProtocol>
他のサイトが示唆しているようにETagを空白の引用符に設定しても機能しません。
<httpProtocol>
<customHeaders>
<add name="ETag" value="""" />
</customHeaders>
</httpProtocol>
原因さらに ETagが送信される:
ETag: "8ee1ce1acf18ca1:0"、 ""
結論として、少なくともカスタムモジュールなどを記述せずに、IIS7でETagを強制終了するための試みや考えられることは何もありません。
これを処理するカスタムHTTPモジュールを作成しました。それは実際にそれが聞こえるほど悪くはありません。コードは次のとおりです。
using System;
using System.Web;
namespace StrongNamespace.HttpModules
{
public class CustomHeaderModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.PostReleaseRequestState += new EventHandler(application_PostReleaseRequestState);
}
public void Dispose()
{
}
void application_PostReleaseRequestState(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("Server");
HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
HttpContext.Current.Response.Headers.Remove("ETag");
}
}
}
必要なweb.configの変更は次のとおりです。
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By"/>
</customHeaders>
</httpProtocol>
<modules>
<add name="CustomHeaderModule" type="StrongNamespace.HttpModules.CustomHeaderModule"/>
</modules>
</system.webServer>
</configuration>
これは古い質問であることに気づきましたが、解決策を探しているときに出くわしました。 この質問 に投稿した合理的な答えを見つけたと思います。
この問題が発生し、空のカスタムETagヘッダーをIIS 7に設定しても、すべてのファイル(画像ファイルなど)で機能しませんでした。ETagヘッダーを明示的に削除するHttpModuleを作成しました。 。
UPDATE:ユーザー@ChrisBarrのおかげでURL書き換えモジュールの要件が追加されました
Iis 6では簡単です。'ETag '= ""のカスタムヘッダーを追加できます
IIS 7、このスレッドを読んで、カスタムhttpモジュールを使用しないと不可能だと考えた後、私はあなたが単純にインストールできることを発見しました MicrosoftのURL書き換えモジュール と追加次のアウトバウンド書き換えルール:
<outboundRules>
<rule name="Remove ETag">
<match serverVariable="RESPONSE_ETag" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
</outboundRules>
これは実際に機能し、カスタムhttpモジュール(dll)は必要ありません。 system.webServer構成セクションのロック解除とcustomHeadersなどの設定は機能しません-少なくとも私が試したすべてのケースで。シンプルなアウトバウンド書き換えルールがあります。
ちなみに、iis8を使用すると簡単です
<element name="clientCache">
<attribute name="cacheControlMode" type="enum" defaultValue="NoControl">
<enum name="NoControl" value="0" />
<enum name="DisableCache" value="1" />
<enum name="UseMaxAge" value="2" />
<enum name="UseExpires" value="3" />
</attribute>
<attribute name="cacheControlMaxAge" type="timeSpan" defaultValue="1.00:00:00" />
<attribute name="httpExpires" type="string" />
<attribute name="cacheControlCustom" type="string" />
<attribute name="setEtag" type="bool" defaultValue="true" />
</element>
Iis6、iis7、iis7.5でEtag httpヘッダーを完全に削除する方法については、このブログ投稿をご覧ください
http://www.caspianit.co.uk/iis7-etag-problem/ にあるremoveetag.dll
を使用しましたが、完全に機能しました。
それがあなたにとってもうまくいくことを願っています
http://www.jesscoburn.com/archives/2008/10/02/quickly-configure-or-disable-etags-in-iis7-or-iis6/ に素敵な図解ガイドがあります。
基本的に、ETagという名前のカスタム応答ヘッダーを作成し、その値を空にします。
IIS 7では、IIS構成番号は常に0に設定されているため、etagについて心配する必要はありません。
同じファームにIIS6およびIIS7 Webサーバーがある場合は、まだ問題があります。この場合、この 記事 で説明されているように、IIS6の構成番号を手動で0に設定する必要があります。
Etagは、スタックオーバーフローのようにファイル名を変更する必要がないため、実際には非常に便利です(つまり、default.css?1234)。 default.cssファイルを変更すると、etagが変更されるため、後続のリクエストはキャッシュではなくサーバーからファイルを取得します。
これはうまくいくと思う.. removeとblankは機能しないことを知っている。
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="ETag" value=" " />
</customHeaders>
</httpProtocol>
</configuration>
</system.webServer>