https と FileUpload フォームと InternetExplorer
Monday, September 17, 2007 2:50:00 PM
例のアイスコーヒーが出てきた建物でやっていた結合試験での話です。
「頻繁に『ページを表示できません』になる」という故障票があがってきました。しかし、開発環境ではどうやっても再現しません。「こっち(開発環境)では発生しないぞ~」って返そうとした矢先に、とある話を思い出したのでした。試験者に「画面を表示してから1分以上まってから送信して、再現するか確認してみて」と頼んでみたところ、「再現しなくなりました~」という返事。ビンゴ。
直接原因は Internet Explorer の不具合で、
を条件を満たした状態で画面遷移すると、https の接続もせずに「ページが表示できません。(サーバか見つからないか、または DNS エラー)」の画面になる(KB305217)というものです。
さらに、画面遷移の代わりにファイルアップロードフォームを送信すると、タイミングによって、POST データの無い POST リクエストを送る(KB831167)という、極悪な現象まで発生します。サーバ側たでは、標準入力からデータを読み込もうとしたが最後、300秒間身動きがとれなくなります。
最初見たとき、この現象にはかなり驚かされましたが、もっと凄いのはサポート技術情報に書かれている「回避策」の1つに書かれている「サーバの Keep-Alive Timeout を長くする」というもの。1分以上にすると確かに発生しなくなるんですが、これは自殺行為です。仮にサーバの最大同時接続数を100として、10秒ほどで100接続受け付けた場合、最初の Keep-Alive Timeout が発生する 50秒の間、101つ目の接続が受け付けられなくなります。
今回は Apache httpd で Web サーバを構築していたので、「Internet Explorer からの接続は Keep-Alive を無効にする」という設定で回避しました。
… というのはApache のマニュアルページにしっかりのっているし、デフォルトで用意される SSL の設定ファイルにしっかり書いてありました orz
「頻繁に『ページを表示できません』になる」という故障票があがってきました。しかし、開発環境ではどうやっても再現しません。「こっち(開発環境)では発生しないぞ~」って返そうとした矢先に、とある話を思い出したのでした。試験者に「画面を表示してから1分以上まってから送信して、再現するか確認してみて」と頼んでみたところ、「再現しなくなりました~」という返事。ビンゴ。
直接原因は Internet Explorer の不具合で、
- サーバ側で HTTP/1.1 の Keep-Alive を有効にしている
- Internet Explorer よりもサーバの方が Keep-Alive Timeout までの時間が短く設定されている
- 画面表示後、サーバの Keep-Alive Timeout 時間に達したが、Internet Explorer の Keep-Alive Timeout 時間(60秒)には達していないタイミング
を条件を満たした状態で画面遷移すると、https の接続もせずに「ページが表示できません。(サーバか見つからないか、または DNS エラー)」の画面になる(KB305217)というものです。
さらに、画面遷移の代わりにファイルアップロードフォームを送信すると、タイミングによって、POST データの無い POST リクエストを送る(KB831167)という、極悪な現象まで発生します。サーバ側たでは、標準入力からデータを読み込もうとしたが最後、300秒間身動きがとれなくなります。
最初見たとき、この現象にはかなり驚かされましたが、もっと凄いのはサポート技術情報に書かれている「回避策」の1つに書かれている「サーバの Keep-Alive Timeout を長くする」というもの。1分以上にすると確かに発生しなくなるんですが、これは自殺行為です。仮にサーバの最大同時接続数を100として、10秒ほどで100接続受け付けた場合、最初の Keep-Alive Timeout が発生する 50秒の間、101つ目の接続が受け付けられなくなります。
今回は Apache httpd で Web サーバを構築していたので、「Internet Explorer からの接続は Keep-Alive を無効にする」という設定で回避しました。
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
… というのはApache のマニュアルページにしっかりのっているし、デフォルトで用意される SSL の設定ファイルにしっかり書いてありました orz
