« Programming Erlang 日本語訳 | Main | Erlangは関数型だけど難しくない »

Monday, May 07, 2007

jQueryでKeep-Aliveされない問題

ErlangでCometのサンプルを利用されている方から,Connection: close になっているよ,との指摘をいただいた.
で,早速調べてみると,IE・FirefoxではKeep-Aliveだが,Firefoxではcloseになってしまう.
ブラウザ側がリクエストするときに,Connection: close をつけているので,サーバ側の問題ではないようだ.

jQueryのソースを見てみると,

// Make sure the browser sends the right content length
if ( xml.overrideMimeType )
xml.setRequestHeader("Connection", "close");

というコードがあった.

ぐぐってみると,prototype.jsでも同様の処理がある模様.

/* Force "Connection: close" for Mozilla browsers to work around
* a bug where XMLHttpReqeuest sends an incorrect Content-length
* header. See Mozilla Bugzilla #246651.
*/
if (this.transport.overrideMimeType)
requestHeaders.push('Connection', 'close');

とあるので,必要な対策っぽい.

ただ,該当バグは
Bug 246651 – XMLHttpRequest doesn't calculate Content-Length correctly
でもうcloseされているので,1年前には直っている模様.

Keep-Aliveが使えないと,Firewallの負荷などをあげてしまいそうだけど,どっちをとるかだなぁ.
古いブラウザは知らないよ,と言えるなら,Keep-Aliveにできそうだ.
ただ,prototype.jsもjQuery.jsもこの対策をとっているということは,そういうユーザも少なからずいる,ってことなんだろうなぁ.うーむ.

|

« Programming Erlang 日本語訳 | Main | Erlangは関数型だけど難しくない »

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference jQueryでKeep-Aliveされない問題:

« Programming Erlang 日本語訳 | Main | Erlangは関数型だけど難しくない »