なんとなくWebシステム強化週間となっているProgramming SHOT BARです。
今回はURLについてのお話です。
静的なWebページを作ったことのある方だと、HTMLファイルを作ってFTPで転送して―という
作業過程をされたことがあるのではないでしょうか。
また、ローカルフォルダ上にHTMLを書いた場合も、リンク先を相対的に
<a href="/hoge/piyo.html">...</a>
などとすると同一階層にあるhogeフォルダの中のpiyo.htmlに遷移します。
これらの経験から、URLの表現する階層構造はフォルダの階層構造と密接な関係にあるように
思い込んでいる人が多くいるように思います。
実際のところ、Webアプリケーションにしてみれば、URLなんてただのパラメータの一種にすぎません。
HTTPを紐解く
こういうのはASP.NETであったりJavaEEであったり、つまることろWebシステムを作るための
フレームワークの階層で考えてもいまひとつわかりません。もっと根柢の部分、HTTPのプロトコルを
紐解いてみるのが一番です。
たとえばこのblogのURL、http://blogs.wankuma.com/nagise/に対するリクエストを見ると
GET /nagise/ HTTP/1.1
Host: blogs.wankuma.com
といったHTTPヘッダが送られるわけです。このHTTPヘッダのGETの部分の文字列、
つまり、URLのドメイン以降の部分を見て、何かしらの結果を返すのがWebのシステムなわけです。
ですから、送られた文字列に対して処理するだけなのでフォルダとかは関係ありません。
単にフレームワークがURLの文字列と同じフォルダ構成でファイルが準備してあれば
自動でそれを送り返すようにプログラムされているだけにすぎません。
Amazonの例
AmazonのURLなどは、このようなパラメータとして使われており、フォルダ構成と全然関係ないことがわかると思います。
たとえば、Java言語仕様 第3版の場合のURLは以下のようになっています。
http://www.amazon.co.jp
/Java%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98-%E7%AC%AC3%E7%89%88-Java-%E3%82%B8%E3%82%A7%E3%83%BC%E3%83%A0%E3%82%BA-%E3%82%B4%E3%82%B9%E3%83%AA%E3%83%B3
/dp/4894717158
/ref=pd_sim_b_2/250-0299683-3798604?ie=UTF8&qid=1191647297&sr=1-27
長いので改行を入れています。最初のJava~というのはタイトルで、この部分はシステム的には利用されていない様子。
欧米文化圏ならURL上に書名が見えることになるので都合がよいのでしょう。あとは検索エンジンのSEO対策と思われます。
次の/dpの部分が次の区間がISDN番号だということを示すマーカーになっています。
ref~などの部分は参照元ページなどをあらわしているようです。その外セッションを管理するためのワンタイムトークンとかそんな感じっぽい。
というわけで、ざっくりカットして
http://www.amazon.co.jp/dp/4894717158
というURLでアクセスできます。こういった動きをみていると、URLって単なるパラメータなんだ、ということが実感できるのではないでしょうか。
Webアプリケーションを作る際はURLをどのように扱うのか、という部分から設計する必要があるのですね。
投稿日時 : 2007年10月6日 14:33