過去ログ表示


過去ログ 217 を表示

トピック内全 9 記事中の 1 〜 9 番目を表示
[ 最新記事及び返信フォームをトピックトップへ ]
このトピックの全ページ / [0]

パイプラインを有効にする方法
(#34142) このトピック中1番目の投稿
(環境: WinXP SP2/IE6)

はじめまして。
パイプラインとは、1つのコネクションで複数のリクエストを同時に送信することと理解しています。(つまり、ブラウザから1つリクエストを送信後、レスポンスを受信する前に次のリクエストを送信するというような動作。)

2つの埋め込み画像ありのHTMLファイルをGETしようとして、prefs.jsに以下の設定を追加しましたがパイプラインされません。

どなたか、パイプラインされない理由、パイプラインさせる方法など、ご存知でしたら、ご教授ください。本当に悩んでます。助けて〜。

尚、他の条件は以下のとおりです。

○リクエスト
 HTTP/1.1
 Connection: keep-alive

○レスポンス
 HTTP/1.1
 Connectionヘッダなし

user_pref("network.http.pipelining", true);
user_pref("network.http.proxy.pipelining", true);
user_pref("network.http.pipelining.maxrequests", 8);
user_pref("network.http.max-connections", 1);
user_pref("network.http.max-connections-per-server", 1);
user_pref("network.http.max-persistent-connections-per-proxy", 1);
user_pref("network.http.max-persistent-connections-per-server", 1);

Re[1]: パイプラインを有効にする方法
(#34144) このトピック中2番目の投稿
(環境: Mac/SeaMonkey1.0)

2006/09/29(Fri) 09:26:20 編集(投稿者)

> どなたか、パイプラインされない理由、パイプラインさせる方法など、ご存知でしたら、ご教授ください。本当に悩んでます。助けて〜。

FAQ
http://www.mozilla-japan.org/projects/netlib/http/pipelining-faq.html

> HTTP/1.1 に合致するサーバは
> パイプライン化のサポートが必要とされています。
> これはサーバにパイプライン化したレスポンスが
> 必要とされることを意味するわけではありません。
> しかし、クライアントがパイプライン化した
> リクエストを選択した時に失敗してはいけないことを要求します。

パイプラインも Keep-Alive も、サーバとクライアントのコンビネーションで動く機能です。クライアントが要求してもサーバが断ったら、動きません。

それと、残念ながら世の Web サーバには、パイプラインを断ることもうまくできずトラブルを起こすサーバもよくあります。(追記: Keep-Alive がトラブルを起こすことは少ないと思います。デフォルト設定になっていますが、トラブルの話をあまり聞きません)

今回のトラブルについては、相手のサーバないしはプロキシサーバの作りによると思います。

しかし当のサーバとの間だけうまくいっても、他のサーバともパイプラインで動作するかは定かではありません。そんな相性問題を認識した上で、今回の設定を使い続けるかどうかお考えください。私自身はおすすめしません。

Re[2]: パイプラインを有効にする方法
(#34159) このトピック中3番目の投稿
(環境: WinXP SP2/IE6)

ご回答ありがとうございます。

申し訳ございません。どのような問題なのかを書き忘れてしまいました。

HTMLと埋め込み画像はキレイにGETでき、表示も問題ありませんでした。
ただし、etherealでパケットをキャプチャすると、REQ1→RES1(HTML)→REQ2→RES2(GIF)→REQ3→RES3(GIF)となっています。
期待していたREQ1→RES1(HTML)→REQ2→REQ3→RES2(GIF)→RES3(GIF)のシーケンスとならないということです。

私としては、おそらくMozillaの設定の問題ではないかと考えており、サーバやProxyの問題ではないと思っております。

Re[3]: パイプラインを有効にする方法
(#34162) このトピック中4番目の投稿
(環境: その他/Mozilla1.7)

2006/09/29(Fri) 23:24:54 編集(投稿者)

ところで、ご利用のブラウザ種は? IE6 ?

# ローカルなパイプライン利用可能なサーバ(ルーター等他の通信機器で阻害されない)にL3スイッチ程度の経路とNIDSとパケットスニファーで確認するとRFC2068 の 8.1.1 Purpose項と8.1.2.2 Pipelining項が正しくブラウザから出力され、パイプライン処理されます。
http://www.rfc-editor.org/rfc/rfc2068.txt

> ただし、etherealでパケットをキャプチャすると、REQ1→RES1(HTML)→REQ2→RES2(GIF)→REQ3→RES3(GIF)となっています。
> 期待していたREQ1→RES1(HTML)→REQ2→REQ3→RES2(GIF)→RES3(GIF)のシーケンスとならないということです。

コネクションを張った後にHTMLページを読み、描画の為の4枚の画像を取得するためにGETメソッドで4枚分を要求、この間にサーバは画像を未だ出力せず、パケットを受け取ったことのみを返し、画像の準備が出来た後から要求のシーケンス順にコンテンツを応答する事が観測できました。

> 私としては、おそらくMozillaの設定の問題ではないかと考えており、サーバやProxyの問題ではないと思っております。

前後しますが↓はユーザー設定ですか? なにやら値がディホルトと違うのではと思うのですが...(^^) Winの固有環境や、何かの拡張で変わったのでしょうか?
embe**ing/minimo/all.js ←禁止ワードなので**をddと読み替えて下さい。
modules/libpref/src/init/all.js

>> user_pref("network.http.pipelining", true);
>> user_pref("network.http.proxy.pipelining", true);
>> user_pref("network.http.pipelining.maxrequests", 8);
>> user_pref("network.http.max-connections", 1);
>> user_pref("network.http.max-connections-per-server", 1);
>> user_pref("network.http.max-persistent-connections-per-proxy", 1);
>> user_pref("network.http.max-persistent-connections-per-server", 1);

たしか↓がディホルトで無かったのかな〜 パイプラインでの要求数「8」ってそんな大きくしても....(^^)
# 1ビジターに対し大量要求はサーバ側では嫌われます。

user_pref("network.http.pipelining.maxrequests", 4)
user_pref("network.http.max-connections", 24);
user_pref("network.http.max-connections-per-server", 8);
user_pref("network.http.max-persistent-connections-per-proxy", 4);
user_pref("network.http.max-persistent-connections-per-server", 2);

ネットワーク機器の制限かFW(市販品に処理数の少ない物がボトルネックになる事が有る)か何かで、同時セッションを「1」に減らしているのですか? ....(^^)

参考には成りませんが、パイプラインは Firefox1.5系、2.x系、SeaMonkey、Mozilla Suite等の数種で、意図する動作を確認できました。

一度セーフモードとか、別の原因が有るのかを確かめてみては如何でしょう。

Re[4]: パイプラインを有効にする方法
(#34207) このトピック中5番目の投稿
(環境: WinXP SP2/IE6)

お返事ありがとうございます。

ブラウザはFire Fox1.5xです。

> コネクションを張った後にHTMLページを読み、描画の為の4枚の画像を取得するためにGETメソッドで4枚分を要求、この間にサーバは画像を未だ出力せず、パケットを受け取ったことのみを返し、画像の準備が出来た後から要求のシーケンス順にコンテンツを応答する事が観測できました。

まさに上記動作を確認したいのですが、サーバ側が画像1つ1つを返信する方がリクエストを送信するよりも早いために、同一コネクションで複数のリクエストを連続して送信していないように見えるということでしょうか?

> 前後しますが↓はユーザー設定ですか? なにやら値がディホルトと違うのではと思うのですが...(^^) Winの固有環境や、何かの拡張で変わったのでしょうか?
> embe**ing/minimo/all.js ←禁止ワードなので**をddと読み替えて下さい。
> modules/libpref/src/init/all.js
>
> >> user_pref("network.http.pipelining", true);
> >> user_pref("network.http.proxy.pipelining", true);
> >> user_pref("network.http.pipelining.maxrequests", 8);
> >> user_pref("network.http.max-connections", 1);
> >> user_pref("network.http.max-connections-per-server", 1);
> >> user_pref("network.http.max-persistent-connections-per-proxy", 1);
> >> user_pref("network.http.max-persistent-connections-per-server", 1);
>
> たしか↓がディホルトで無かったのかな〜 パイプラインでの要求数「8」ってそんな大きくしても....(^^)
> # 1ビジターに対し大量要求はサーバ側では嫌われます。

connectionsを全て1にしているのは、1にしないとブラウザがサーバ側に対して同時に複数のsynパケットを送信してしまう為です。1コネクション中に複数のリクエストを連続して送信するようにさせたかったので、上記設定としています。


無知で申し訳ないのですが、下記の意味を教えていただけないでしょうか?秘密の暗号?(~~;)

> embe**ing/minimo/all.js ←禁止ワードなので**をddと読み替えて下さい。
> modules/libpref/src/init/all.js

Re[1]: パイプラインを有効にする方法
(#34209) このトピック中6番目の投稿
(環境: Win2000/SeaMonkey1.0)

> はじめまして。
> パイプラインとは、1つのコネクションで複数のリクエストを同時に送信することと理解しています。(つまり、ブラウザから1つリクエストを送信後、レスポンスを受信する前に次のリクエストを送信するというような動作。)
>
> 2つの埋め込み画像ありのHTMLファイルをGETしようとして、prefs.jsに以下の設定を追加しましたがパイプラインされません。
>
> どなたか、パイプラインされない理由、パイプラインさせる方法など、ご存知でしたら、ご教授ください。本当に悩んでます。助けて〜。

pipeliningは個人的にはあまりお奨めできませんね。
相手のサーバ次第なので、劇的に改善することもあれば、劇的に悪くなることもあります。
劇的に悪くなる例としては、有名どころではhttp://japan.cnet.com/とかhttp://www.itmedia.co.jp/あたりでしょうか。
pipeliningを有効にした状態でスーパーリロードしてみてください。読み込みが遅くなるだけではなく画像がめちゃくちゃになります。
(画像めちゃくちゃはMozilla側のバグだった気が……)
デフォルトで無効になっているのは、このへんが理由だったと思います。

Re[2]: パイプラインを有効にする方法
(#34212) このトピック中7番目の投稿
(環境: WinXP SP2/IE6)

お返事ありがとうございます。

> pipeliningは個人的にはあまりお奨めできませんね。
> 相手のサーバ次第なので、劇的に改善することもあれば、劇的に悪くなることもあります。

実は今回、パイプラインに対応するサーバを立てようと思いまして、そのために利用できるブラウザが実在することを確認したくて、今回投稿させていただいたしだいです。

Re[3]: パイプラインを有効にする方法
(#34215) このトピック中8番目の投稿
(環境: その他/Mozilla1.7)

>>pipeliningは個人的にはあまりお奨めできませんね。
>>相手のサーバ次第なので、劇的に改善することもあれば、劇的に悪くなることもあります。

↑「個人的にはお奨めできません」ハゲシク同感します

> 実は今回、パイプラインに対応するサーバを立てようと思いまして、そのために利用できるブラウザが実在することを確認したくて、今回投稿させていただいたしだいです。

「connectionsを全て1にしている」理由には元々ご利用OSのTCPスタックに問題が有るのか、前記したようにFW系に無理(仕様)が有るのではと思います。

Internet Connection Firewall(ICF)/Internet Connection Sharing(ICS)

WinXP SP2とWin2003 SP1では同時接続数を制限(一応外向きと言う名目)。
http://itpro.nikkeibp.co.jp/article/Watcher/20060812/245765/?ST=print

ブラウザ(Firefoxは設定された通りに要求します)で無くても、簡単なソケットプログラムでKeep-Alive内で複数の要求を行えば何が悪さをしているか? 確認できるのではと思います。

> ?秘密の暗号?
ではなく ディホルト値が何かの、http://lxr.mozilla.org/ ソースへのポインタです。(Mozillzはオープンソースなのです)

Re[4]: パイプラインを有効にする方法
(#34325) このトピック中9番目の投稿
(環境: WinXP SP2/IE6)

> WinXP SP2とWin2003 SP1では同時接続数を制限(一応外向きと言う名目)。
> http://itpro.nikkeibp.co.jp/article/Watcher/20060812/245765/?ST=print

上記記事はとても参考になりました。
MSの影響力ってすごいなと改めて感じました。

>
> ブラウザ(Firefoxは設定された通りに要求します)で無くても、簡単なソケットプログラムでKeep-Alive内で複数の要求を行えば何が悪さをしているか? 確認できるのではと思います。

とりあえず、HTTPリクエストを2つ連続して送るプログラムを作成し、試してみたところ、問題なく動作しました。(2つリクエストに対してそれぞれACKが返ってきていました。)IISもちゃんとHTTPレスポンスを2つ返してくれました。とりあえず、ハードやOSなどに問題はなさそうです。
謎は深まるばかり...。


>>?秘密の暗号?
> ではなく ディホルト値が何かの、http://lxr.mozilla.org/ ソースへのポインタです。(Mozillzはオープンソースなのです)

初期値は「about:config」で確認してたのですが、ソースを直接見るなんて、考えもつかなかったですよ。


このトピックの全ページ / [0]

返信不可


- Child Tree -