2006年12月18日(月) [過去の今日]
#2 最大接続数を増やして速くなったと喜ぶ人々、再び
またこういうバカなことをする輩 が現れた。
2年近く前の記事 でも書いたのだが、肝心の情報が当時俺が噛みついたサイトのコメント欄にあったりして、さらにはそのサイト消えちゃってる *1 ので、ここに少しまとめておこう。
まず考慮にいれて置かねばならないのは、RFCで定められたHTTPにおいて、同時接続数が明記されてるということ。
- HTTP/1.0
- 同時接続数は4つまでと慣習的に定められている。
- HTTP/1.1
- 同時接続数は2までとRFC2616において定められている。その代わりpipeliningという手法が定義されている。
そしてこれが何故制限されてるかというのは、
- 接続をオープンするのはサーバに負荷がかかる
- ゆえに接続を同時にオープンできる数には限りがある
- 1人が多数の接続を同時にオープンすると、他の人が繋げなくなる
という、わかってる人には至極当り前のこと。
それから、pipeliningに関しては、
- pipeliningは1つの接続で複数のリクエストをやりとりするための手順
- かといってたくさんのリクエストを投げればその分ポートの占有時間も長くなるから迷惑なのは同じ
- だいたい4〜8程度にしておくのが無難。Firefoxは4、Operaは8がデフォルト。
まずIEに関しては、 Microsoftのサポート情報 が詳しい。同時接続数の変更法とそれを行ってはいけない理由が書かれている。
Firefoxに関しては、pipeliningがデフォルトでオフになってる(一部のサーバがまだ未対応のため)ので、これをオンにする程度は問題無い。
結論としては、IEでこのへんのチューニングをするのはNG。Firefoxの場合は以下のような設定にとどめること。
user_pref("network.http.pipelining", true); user_pref("network.http.pipelining.maxrequests", 8);
HTTPまわりの詳細は [Studying HTTP] Persistent Connections が詳しい。ウェブサーバ管理者は、mod_limitipconn を使って対策するべし。
以上。
(@213)
@ 追記:
このあと書いた ごめん、それはちょっと書き方悪かった と 俺じゃないけど俺に言われてるも同然なので反応してみる も参照のこと。
@ 直してもいいんだけど:
直しはじめるときりが無いっつーか。とりあえず現状でヨロ。