ゴール
ブラウザと同じように、HTMLドキュメントへのリクエストでシミュレートしたいと思います。つまり、メインのHTMLファイルだけでなく、CSS、JS、画像などのリンクされたものもダウンロードしたいということです。
今のところ、最初のHTMLドキュメントのみを解析したいと思います。つまり、CSS(background-images、web-fonts)やJavaScript(Ajax)などの解析の結果として生じるリクエストは考慮されていません。
これを実装するには、ブラウザがWebサイトを正確に処理する方法を知る必要があります。私はそれについての良い参考文献を見つけていません。それに関するどんな助けも大いに感謝され、おそらく私の問題を解決するでしょう。
予測
適切な参照がなかったため、プロセス(リダイレクト、レンダリングなどを考慮しない)は次のように機能すると想定しました。
- 持続的HTTP接続は
www.facebook.com
- パス「/」が要求され、HTMLが受信されます
- ドキュメントが完全に(?)受信されると、ドキュメントが解析され、要求する必要のあるURLのリストが入力されます(頭と体のオブジェクトに分割されますか?!)
- 最初のURLはヘッドリストから取得され、そのホストとの永続的なHTTP接続が確立されているかどうかがチェックされます
- ない場合は、それが確立され、その後、オブジェクトが要求されます
- ある場合は、接続の「ダウンロードキュー」に追加されます
- リストが空になるまでステップ4を繰り返します
- 次に、「ボディリスト」に対して手順4〜5が繰り返されます。
これはブラウザの動作にさえ近いですか?
ボーナスの質問:ヘッダー内のJavaScriptファイルとCSSファイルの順序に違いはありますか?
疑い
確認するために、Chromeデベロッパーツール(Chrome 18)を使用していくつかのテストを実施しました。www.facebook.com
各オブジェクトがロードされたときの測定に接続しました。Ctrl+を使用してリロードするとR、結果は次のようになります。
私が最も困惑しているのは、同じホストからの場合でも、ほとんどのリクエストが他のリクエストと同時に実行されることです(static.ak.fbcdn.net
)。ブラウザでパイプラインが無効になっているのに(デフォルト設定)、リクエストが同時に発生しているように見えるのはなぜですか?