高性能 Web サイトに関する Yahoo のベスト プラクティスに従って、ヘッダーからEtagsを削除したいと考えています (すべてのキャッシュを手動で管理しており、Etags は必要ありません...そして、ファームにスケーリングする必要がある場合は、私は本当に彼らがいなくなってほしいです)。Windows Server 2008 で IIS7 を実行しています。これを行う方法を知っている人はいますか?
12 に答える
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>
これは古い質問だと思いますが、解決策を探しているときに見つけました。この質問に投稿した合理的な答えを見つけたと思います。
この問題があり、IIS 7 で空白のカスタム ETag ヘッダーを設定しても、すべてのファイル (画像ファイルなど) に対して機能しませんでした。最終的に、ETag ヘッダーを明示的に削除する HttpModule を作成しました。
更新:ユーザー @ChrisBarr のおかげで、URL 書き換えモジュールの要件が追加されました
iis 6 では簡単です。'ETag' = "" のカスタム ヘッダーを追加できます。
IIS 7 では、このスレッドを読み、カスタム http モジュールを使用しないと不可能だと判断した後、 Microsoft の URL Rewrite モジュールをインストールして、次のようにアウトバウンド リライト ルールを追加するだけでよいことがわかりました。
<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>
http://www.caspianit.co.uk/iis7-etag-problem/removeetag.dll
で見つかったものを使用しましたが、 完全に機能しました。
それがあなたにとってもうまくいくことを願っています
iis6、iis7、および iis7.5 で Etag http ヘッダーを完全に削除する方法については、このブログ投稿を確認してください。
http://www.jesscoburn.com/archives/2008/10/02/quickly-configure-or-disable-etags-in-iis7-or-iis6/には素敵な画像ガイドがあります。
基本的に、ETag という名前のカスタム応答ヘッダーを作成し、その値を空にします。
これでうまくいくと思います..削除と空白が機能しないことはわかっています。
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="ETag" value=" " />
</customHeaders>
</httpProtocol>
</configuration>
</system.webServer>
IIS 7 では、IIS 構成番号が常に 0 に設定されているため、etags について心配する必要はありません。
IIS6 と IIS7 の Web サーバーが同じファームにある場合、まだ問題があります。この場合、この記事で説明されているように、IIS6 構成番号を手動で 0 に設定する必要があります。
Etag は、スタック オーバーフローのようにファイル名を変更する必要がないため (つまり、default.css?1234)、実際には非常に便利です。default.css ファイルを変更すると、etag が変更されるため、後続のリクエストはキャッシュではなくサーバーからファイルを取得します。