Internet Explorer 6 を使用して、インターネット インフォメーション サービス 6.0 でホストされている Web アプリケーションにアクセスすると、Web パフォーマンスが低下することがある

文書翻訳 文書翻訳
文書番号: 922703 - 対象製品
すべて展開する | すべて折りたたむ

現象

次のような状況を想定します。
  • Microsoft インターネット インフォメーション サービス 6.0 (IIS 6.0) Web アプリケーション環境で Windows 統合認証を使用している。
  • Microsoft Internet Explorer 6 を使用して、IIS 6.0 でホストされている Web アプリケーションにアクセスしている。
この場合、Web アプリケーションのパフォーマンスが低下することがあります。

: 認証プロトコルとして匿名認証を使用した場合、この問題は発生しません。また、クライアントのブラウザが Internet Explorer 6 以外のブラウザ (Mozilla Firefox など) である場合にもこの問題は発生しません。

原因

この問題は、Internet Explorer 6 クライアントが定期的に TCP 接続をリセットすることが原因で発生します。

クライアントとサーバーの間の通信速度が低下しているときにキャプチャされたネットワーク トレースを分析すると、クライアントが要求したリソースに対して 200 応答が返された後 TCP がリセットされることがわかります。クライアントは、ETag HTTP ヘッダーとその値が含まれた GET 要求を送信します。IIS 6.0 を実行しているサーバーは、その要求を受信すると、ETag の値を比較し、要求されたファイルの現在の値と ETag の値 (変更番号以外) が一致するかどうかを確認します。

: ETag ヘッダーの形式は次のとおりです (Filetimestamp はファイルのタイム スタンプを、ChangeNumber は変更番号を表します)。

Filetimestamp:ChangeNumber

たとえば、Internet Explorer クライアントが ETag 値 0222d5bffcbc41:301a を含む要求を送信し、その後サーバーが ETag 値 0222d5bffcbc41:3246 を含む HTTP 200 応答を送信します。

要求内の Filetimestamp の番号は、要求されたリソースの現在の値として IIS 6.0 が認識する番号と一致しますが、要求内の ChangeNumber の番号はその番号と一致しないため、IIS 6.0 はクライアント側にキャッシュされているコピーを提供するよう Internet Explorer に指示せず、そのファイルの現在のバージョンを返します。Internet Explorer には、200 応答の Filetimestamp を、ローカルにキャッシュされたコピーの Timestamp と比較するコードが含まれています。これらの値が一致した場合、接続はリセットされます。これは Internet Explorer クライアントで、内容が一致した場合は 304 状態報告を受信することが想定されているためです。

つまり IIS 6.0 は、変更番号が一致しない場合、クライアントによって要求されたリソースのバージョンが、クライアントのブラウザ キャッシュにあるこのリソースの既存のバージョンに一致しないと認識するため、200 応答を送信します。しかし Internet Explorer は、Filetimestamp が一致しているため、同じバージョンであると認識します。さらに Internet Explorer は、誤って送信された 200 応答を受信していると認識します。この場合、Internet Explorer は TCP 接続をリセットします。

回避策

Microsoft Windows Server 2003 ベースのコンピュータを使用している場合

この問題を回避するために、Web サーバーに変更番号をハードコードし、すべての Internet Explorer クライアントに対して、ファイルのバージョンを同期することをお勧めします。すべての Internet Explorer クライアントは、アプリケーションに必要なすべてのファイルのバージョンを保持するため、サーバーとすべてのクライアントが同期されているようにする必要があります。

: IIS 6.0 Web ファーム環境で実行している場合は、ファーム内で IIS 6.0 を実行しているすべてのサーバーに同じ変更番号をハードコードする必要があります。

変更番号の値をクライアントとサーバーの間で同期するには、次の手順を実行します。
  1. IIS 6.0 メタベースの ETag 値を手動でハードコードします。

    Windows Server 2003 Service Pack 1 (SP1) では、IIS 6.0 の ETag 変更番号を変更できます。
    : ETag 値を変更すると問題が発生する場合があります。この問題を解決するには、修正プログラムをインストールする必要があります。 この修正プログラムの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    900245 IIS 6.0 のメタベース プロパティを変更すると ETAG フィールドの値が更新される
    修正プログラムのインストール後、手動で ETag 変更番号をハードコードできます。ただし、ETag 変更番号の設定は、Active Directory サービス インターフェイス (ADSI) 名前空間に公開されていません。このため、Metabase Explorer ツールを使用して、プロパティ ID を手掛かりにして値を設定する必要があります。Metabase Explorer をダウンロードしてインストールするには、次のマイクロソフト Web サイトを参照してください。
    http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/993a8a36-5761-448f-889e-9ae58d072c09.mspx
    : Metabase Explorer は、IIS 6.0 Resource Kit Tools に含まれています。

    手動で ETag 変更番号をハードコードするには、次の手順を実行します。
    1. Metabase Explorer を起動し、左側のウィンドウの [LM] を展開して、[W3SVC] をクリックします。
    2. 右側のウィンドウにある ID 2039 のレコードをダブルクリックします。
    3. [Value] ボックスに 1 〜 4294967295 の数字を入力します。実際に使用する値は、この範囲内であればどの値でもかまいません。詳細については、次のマイクロソフト Web サイトを参照してください。
      http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ef7f9d58-2a96-4bd8-8ac1-2a67b43284f1.mspx
    4. [Apply] をクリックし、[OK] をクリックします。
    : IIS 6.0 Web ファーム環境で IIS 6.0 サーバーを実行している場合は、ファーム内のすべての IIS 6.0 サーバーで手順 1a. 〜 1d. を実行します。すべてのサーバーで同じ変更番号を追加するようにしてください。
  2. クライアントの Internet Explorer のブラウザ キャッシュをクリアします。

    クライアント ブラウザの数が多すぎて手動ではキャッシュを消去できない場合は、IIS 6.0 の [コンテンツに有効期限を設定する] チェック ボックスをオンにした後、コンテンツの有効期限が直ちに切れるように指定できます。この場合、クライアントが保持するすべてのコンテンツが最新になるまでの間のみ、[コンテンツに有効期限を設定する] チェック ボックスをオンにしておき、コンテンツが最新になったら [コンテンツに有効期限を設定する] チェック ボックスをオフにして、キャッシュされたコンテンツを再び Internet Explorer で提供できるようにする必要があります。コンテンツの有効期限を有効にするには、次の手順を実行します。
    1. インターネット インフォメーション サービスを起動します。
    2. 左側のウィンドウの [LocalMachine] を展開し、[Web サイト] をクリックします。
    3. [Web サイト] を右クリックし、[プロパティ] をクリックします。
    4. [HTTP ヘッダー] タブで、[コンテンツに有効期限を設定する] チェック ボックスをオンにし、[直ちに有効期限を切る] をクリックします。
    5. IIS 6.0 サービスを停止して再起動します。
    : [コンテンツに有効期限を設定する] チェック ボックスがオンになった後、Internet Explorer のキャッシュを更新するためにクライアントから 1 つのリソースに対して 2 回要求することが必要な場合があります。

Windows Server 2003 ベースのコンピュータを使用していない場合

この問題を回避するには、「Microsoft Windows Server 2003 ベースのコンピュータを使用している場合」の手順 2. を使用して、IIS 6.0 の [コンテンツに有効期限を設定する] チェック ボックスをオンにしておきます。さらに、Internet Explorer のキャッシュ機能を無効にするか、Web アプリケーションにキャッシュ制御ヘッダーを設定します。 Web キャッシュを無効にする方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
311006 [HOWTO] Windows 2000 で Web キャッシュを禁止する方法

状況

この動作は仕様です。

詳細

クライアントまたはサーバーでキャプチャされたネットワーク モニタのトレースを分析する際に、そのトレースがこの資料に記載されているパフォーマンスのシナリオに関連している場合、次に示す一連の動作を確認できます。
  1. クライアントが、IIS 6.0 を実行しているサーバーに GET 要求を送信します。この要求には、Filetimestamp:ChangeNumber 値を持つ If-None-Match ヘッダーが含まれています。要求の例を次に示します。
    HTTP: GET Request from Client
    HTTP: Request Method =GET
    HTTP: Uniform Resource Identifier =/MARRS/webService.htc
    HTTP: Protocol Version =HTTP/1.1
    HTTP: Accept = */*
    HTTP: Accept-Encoding =gzip, deflate
    HTTP: If-Modified-Since =Tue, 16 Nov 2004 17:11:48 GMT
    HTTP: If-None-Match ="0222d5bffcbc41:301a" 
    HTTP: User-Agent =Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET 
    CLR 1
    HTTP: Host =nnoma-wwapp02m
    HTTP: Connection =Keep-Alive
    HTTP: Authorization =Negotiate 
    TlRMTVNTUAADAAAAGAAYAG4AAAAKAQoBhgAAAAoACgBIAAAAEgASA
    HTTP: Cookie =ASP.NET_SessionId=uqnwgpygpf0dh2iwysznat55
    
    : これらの例に含まれているいくつかの HTTP 変数は、環境によって異なる場合があります。
  2. サーバーが要求を受信し、要求されたデータと共に 200 応答を送信します。クライアントが If-None-Match ヘッダーを送信したため、IIS 6.0 は応答に ETag 応答ヘッダーとヘッダーの値を含める必要があります。この応答の例を次に示します。
    HTTP: Response to Client; HTTP/1.1; Status Code = 200 - OK
    HTTP: Protocol Version =HTTP/1.1
    HTTP: Status Code = OK
    HTTP: Reason =OK
    HTTP: Content-Length =51622
    HTTP: Content-Type =text/x-component
    HTTP: Last-Modified =Tue, 16 Nov 2004 17:11:48 GMT
    HTTP: Accept-Ranges =bytes
    HTTP: ETag ="0222d5bffcbc41:3246"
    HTTP: Server =Microsoft-IIS/6.0
    HTTP: X-Powered-By = ASP.NET
    HTTP: Date =Tue, 27 Sep 2005 12:18:27 GMT
    HTTP: Data: Number of data bytes remaining = 1202 (0x04B2)
    
  3. クライアントが応答を受信します。応答の状態は、ブラウザで予期していた HTTP 304 ではなく HTTP 200 です。このため、ブラウザは TCP RST を送信して接続をリセットします。この動作は、Internet Explorer が、サーバーから誤って HTTP 200 状態が送信されたと認識することが原因で発生します。TCP RST の例を次に示します。
    TCP: Control Bits: .A.R.., 
    TCP: Source Port = 0x0747
    TCP: Destination Port = World Wide Web HTTP
    TCP: Sequence Number = 3840808344 (0xE4EE1598)
    TCP: Acknowledgement Number = 3150159894 (0xBBC3A016)
    TCP: Data Offset = 20 bytes
    TCP: 0101.... = Data Offset (20 bytes)
    TCP: ....0000 = Reserved bits
    TCP: Flags = 0x14 : .A.R..
    TCP: ..0..... = No urgent data
    TCP: ...1.... = Acknowledgement field significant
    TCP: ....0... = No Push function
    TCP: .....1.. = Reset the connection
    TCP: ......0. = No Synchronize
    TCP: .......0 = Not the end of the data
    TCP: Window = 0 (0x0)
    TCP: Checksum = 0xF26C
    TCP: Urgent Pointer = 0 (0x0)
    
    伝送制御プロトコル (TCP) の詳細については、次の Web サイトを参照してください。
    http://www.faqs.org/rfcs/rfc793.html

プロパティ

文書番号: 922703 - 最終更新日: 2007年4月2日 - リビジョン: 1.0
この資料は以下の製品について記述したものです。
  • Microsoft Internet Explorer 6.0
  • Microsoft Internet Information Services 6.0
キーワード:?
kbtshoot kbprb KB922703
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com