- PR -

ブラウザーでの相対パス→絶対パス変換について

1
投稿者投稿内容
mandm
常連さん
会議室デビュー日: 2005/06/04
投稿数: 30
お住まい・勤務地: ニューヨーク
投稿日時: 2005-06-14 13:39
いつも お世話になります。

さっそくですが、下記のURLでアクセスできるtomcat webアプリで
http://hogehoge:8080/testapp/ABC.jsp
ABC.jspの内部には、別のJSPへの相対パスでのリンクがあります。
<a href="XYZ.jsp">XYZ</a>
(*XYZ.jspは ABC.jspと同じディレクトリにある)
この際、ブラウザーで、ABC.jspにまず絶対PATHでアクセスして
帰ってくるHTMLをブラウザーで表示し、そのHTMLソースをみるとまま当然
<a href="XYZ.jsp">XYZ</a>
と相対パスのままのHTMLのリンクがローカルにきています。しかし、
マウスで、そのリンクの上をMOUSEOVERすると ブラウザー(IEですが)
下のほうに 絶対パスが表示されます。実際クリックすると絶対パスで
ブラウザーはアクセスしますよね。
http://hogehoge:8080/testapp/XYZ.jsp
と。いままでは、別に不思議に思わなかったんですが、

HTTP をSNIFFERして レスポンスの ヘッダーやHTML本体をみても
相対パスから 絶対パスを作り出す情報が送られていません。
すなわち HTTPヘッダーに 
いま
http://hogehoge:8080/testapp
っていうCONTEXSTだよー、という情報がないのです。
ブラウザーはいったいどうやって 絶対パスを作り出しているんでしょうか?
だれが、”http://hogehoge:8080/testapp”の部分をブラウザーに
教えているのでしょう?

目的を書きますと、あまり上記と関係ないとおもうのと
長くなるので簡単に書くと
Proxyservletというのを作って、別システムのPHPとか
ほかのJava webappをServlet経由(Proxy)で表示させようとしてるのですが、
(sitemeshの実験です。)
ブラウザーが目的の絶対パスURLを作ってくれないのです。
上記でいうと XYZへのリンクをおすと
http://hogehoge:8080/XYZ.jsp にいってしまう。。。
(ABC.jspとXYZ.jspがルートディレクトりにあれば問題なく動いています。)
レスポンスのヘッダーをいじればいいのかなとHTTPレスポンスの中身をみても
そういう情報がブラウザーに帰ってないので、あーどうしたものやらと。
なにか見過ごしているのではとおもいつつ 解決しないので投稿しました。
(正直、javaに限った話でないかもと思いつつ投稿しております、すみません)

ココ変だよ、というものでもいいので 何かありましたらよろしくお願いします。



[ メッセージ編集済み 編集者: hypergori 編集日時 2005-06-14 13:40 ]
okutin
ベテラン
会議室デビュー日: 2003/12/11
投稿数: 98
お住まい・勤務地: 広島
投稿日時: 2005-06-14 13:53
こんにちは

引用:

hypergoriさんの書き込み (2005-06-14 13:39) より:

ブラウザーはいったいどうやって 絶対パスを作り出しているんでしょうか?




今アクセスし表示しているURLをブラウザは分かっているわけですから、そこから生成します。

ちなみにhtml中にbase要素を入れて無理矢理ベースとなるURLを変更することもできます。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2005-06-14 16:40
たとえば、ブラウザさんが認識している「現在のURL」が
http://hogehoge:8080/testapp の場合と
http://hogehoge:8080/testapp/ の場合では、
相対URL href="XYZ.jsp" の解決結果が異なります。このへんは注意が必要です。
mandm
常連さん
会議室デビュー日: 2005/06/04
投稿数: 30
お住まい・勤務地: ニューヨーク
投稿日時: 2005-06-14 20:44
どんな風に ちがうんでしょうか?

http://hogehoge:8080/testapp の場合は
http://hogehoge:8080/XYZ.jsp


http://hogehoge:8080/testapp/ の場合は、
http://hogehoge:8080/testapp/XYZ.jsp

でしょうか?あとその”現在のURL”は
HTMLのbase要素でのみ変更可能なのでしょうか?

質問ばかりですみません。
1

スキルアップ/キャリアアップ(JOB@IT)