Home > スポンサー広告 > Webブラウザの仕組み

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Comments:-

Comment Form

Trackback+Pingback:-

TrackBack URL for this entry
http://netforestdevnote.blog26.fc2.com/tb.php/1-1c165ca0
Listed below are links to weblogs that reference
スポンサーサイト from Netforest Developer's Note

Home > スポンサー広告 > Webブラウザの仕組み

Home > ブラウザ > Webブラウザの仕組み

Webブラウザの仕組み

どうもはじめまして!ガッツと申します。

つい先日、いま話題の映画「おくりびと」を見てきました。アンコール上映だったみたいで、
ほぼ満員だったことに興奮してしまいました。噂に違わぬ内容で、とりあえずモッくんが
かっこよすぎでした。広末涼子もセクシーです。

このブログ、「Netforest Developper's Note」では、ネットフォレストのWEBアプリケーション
開発チームによる日々の研鑽事を公開していく予定です。宜しくお願いしますm(_ _)m

今日が1回目なので、何を書こうか迷いましたが、基本的なところからと思いまして、
Webブラウザのリクエストからページ表示まで、自分の復習もかねておおざっぱに内容を
まとめていきたいと思います。

まず、

代表的なWebブラウザとして

 
 Internet Explorer
 Firefox
 Opera
 Safari
 Google Chrome

 などいろいろあるかと思いますが、細かい紹介はなしで、自分が一番よく使うのはやはり
 FireFoxでしょうか。
 FireBugModifyHeadersなどのプラグインにはかなりお世話になってます。
 Opera、Safariについてはあまり触ったことがないのですが面白そうな機能があったら誰か教えて下さい!
 
ブラウザにURLを入力する

 URLの先頭に記述する文字列としてhttp: ftp: file: mailto: などありますが
 アクセス先がWebサーバならHTTPというプロトコルを使ってアクセスします。
 FTPサーバならFTPというプロトコルを使ってアクセスするいった感じでしょうか。
 今回はWebサーバにアクセスする場合について考えていきたいと思います。
 
 HTTPプロトコルについて
  主にWebブラウザとWebサーバの間でHTMLなどのコンテンツ送受信に用いられる
  通信プロトコルでありRFC2616で定められています
  簡単に言うと、クライアントとサーバがやり取りするメッセージの内容や手順を定めたもの

 そして、URLを要素に分け解読することで、アクセスしたいドメイン名、ファイル名の情報が
 わかったとして、その後にクライアント(ブラウザ)からサーバにリクエストメッセージを送ります。

URLの意味にしたがってリクエストメッセージを作成する

 まず、メッセージのなかには、ホスト名、URI、メソッドを記述します。HTTPのメソッドには
 GET、POST、HEADなど他にもありますが、一番よく使われるのはGETでしょう。
 普通にWebサーバにアクセスして、ページのデータを読み出す時に使うのが
 GETメソッドだからです。
 次によく使うのがPOSTメソッドで、これはフォームにデータを記入して、Webサーバに
 データを送信する場合に使います。インターネットで買い物をする時に住所やメール
 アドレスを入力して申し込みをする時などです。
 
 Webサイトにアクセスした時に、具体的にどのようなメッセージのやり取りが行われているか、
 FirefoxのLiveHTTPHeadersというプラグインを使ってHTTPリクエストのメッセージについて見てみます。
 (IE用のツールとしてはieHTTPHeadersがあります。LiveHttpHeadersと比べると機能は少ないようですが。)

 例えばアドレスバーに、http://netforest.ad.jp/index.html と入力してエンターキーを叩くと・・・

GET /index.html HTTP/1.1
Host: netforest.ad.jp
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: __utma=xxxxxxxx.297686213.1168319761.1235965276.1236044838.46; __utmz=11064235.1235965276.45.1.utmccn=(referral)|utmcsr=netforestdevnote.blog26.fc2.com|utmcct=/|utmcmd=referral; __utmb=11064235; __utmc=11064235

HTTP/1.x 200 OK
Date: Tue, 03 Mar 2009 01:49:00 GMT
Server: Apache/1.3.39 (Unix) mod_layout/3.2.1 mod_gzip/1.3.26.1a mod_ssl/2.8.30 OpenSSL/0.9.7d-p1 DAV/1.0.3
Vary: *
X-Powered-By: ModLayout/3.2.1
Connection: close
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 3896



 というように表示されました。
 (空行から上がブラウザからのリクエスト、下についてはレスポンス)

 リクエストメッセージを送信するとレスポンスメッセージが返ってきます。
 レスポンスメッセージには、正常終了したのかエラーが起きたのかが
 書かれていて、ステータスコード(200)、レスポンスフレーズ(OK)が表されています。
 例えばページが存在しない場合なら「HTTP/1.x 404 Not Found」のようなレスポンスになります。
 
メッセージを作ったら、OSに依頼してWEBサーバに送信してもらう

 ブラウザは、URLの解読とリクエストメッセージを作ることができますが、
 そのメッセージをネットワークに送り出す機能はないため、OSに依頼して
 メッセージを送ってもらいます。
 その時、ドメイン名ではなく、IPアドレスでメッセージを送信する相手を
 指定する必要があるため、URL中にあるサーバのドメインからIPアドレスを
 調べる必要があります。
 URL中にIPアドレスを直接指定しても、正しく動作する場合もあるので、
 ドメイン名は使わなくてもいいんじゃないかと思いますが、数字の羅列を覚えるのも
 大変ですし、サーバの名前がわかればIPアドレスがわかる、IPアドレスが
 わかれば名前がわかるという仕組みがあり、それがDNSと呼ばれています。
 
 DNSの仕組みについては、またの機会に掘り下げていきたいと思います。

IPアドレスを調べて、リクエストメッセージを送信する

 IPアドレスを調べる際は、DNSサーバに問い合わせメッセージを送り、そこから
 送り返される応答を受け取って調べています。DNSサーバから見てブラウザは
 DNSリゾルバと呼ばれ、リゾルバの実体はSocketライブラリにある部品化した
 プログラムです。SocketライブラリというのはOSに組み込まれているネットワーク
 機能をアプリケーションから呼び出すもので、リゾルバはその中の部品の一つと
 なっているようです。
 
 そしてIPアドレスを調べることができたら、そのIPアドレスの相手であるWebサーバに
 メッセージを送信するよう、OSの内部にあるプロトコル・スタックに依頼し、
 
 1.ソケットを作る
 2.サーバ側のソケットにパイプを接続する
 3.データ送受信する
 4.パイプを外してソケットを切断する

 というような流れになっています。

 レスポンスメッセージが返ってきたら、Webページが目に見える形になります。
 ただ、ページに画像がある場合にはこれで終わりではなく、その画像について
 もう一度リクエストメッセージを作成して、Webサーバにアクセスして別々に
 ファイルを読み出します。(リクエストメッセージに記述できるURIは一つだけなので)
 
 また、WEBサーバ側では、ページと画像それぞれ別のリクエストになっていることに
 対して、それが一つのページなのか別々のページのリクエストなのかは判断せず、
 1つのリクエストに対して、1つのレスポンスを返すだけです。

 ですので、もともとはHTMLドキュメントや画像の一つ一つを別々のものとして
 1つのファイルを読み出す度に、接続→リクエスト送信→レスポンス受信→切断
 という動作を繰り返すという考え方でした。
 ですが、同じサーバから複数のファイルを読み込む時に何度も切断するのは
 効率が悪いので、1回接続したら切断せずに複数のリクエストとレスポンスの
 やり取りを実行する方法が後で用意されました。
 HTTPバージョン1.1はその方法を使うことができるようです。

 そしてレスポンスを受け取って、ブラウザに画面が表示されるという流れです。

まだまだリクエストを受け取ったサーバ側の処理や、ブラウザのレンダリングについてなど、
実際行われている処理はたくさんあると思いますが…。だいたいこのような流れでリクエスト
メッセージ送信をし、レスポンスを受け取ってブラウザの方でページ表示までが行われています。

というわけで、このへんで初投稿を終わります。

おしまい


すみません。今回は以上でして、次回からはもっとポイントを絞った内容にしていきたいです!

Comments:0

Comment Form

Trackback+Pingback:0

TrackBack URL for this entry
http://netforestdevnote.blog26.fc2.com/tb.php/1-1c165ca0
Listed below are links to weblogs that reference
Webブラウザの仕組み from Netforest Developer's Note

Home > ブラウザ > Webブラウザの仕組み

Recent Comments
Recent Trackback
Search
Meta
Links
Feeds

Page Top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。