プロが教える店舗&オフィスのセキュリティ対策術

ふと疑問に思ったことがあるので、ご存知の方がいらっしゃいましたら教えてください。

リンクタグ(や画像タグ)での属性にファイルパスを書く方法として、

href="./hello/test.html"
href="hello/test.html"

の二通りがありますよね?でもこれってどうして「どちらでもOK」になってしまったのでしょうか?
あるいはどちらの方が好ましいというのはありますか?

単純に考えれば短い(ちょっとでもバイト数が少ない)方が良い気もしますが、
でも後者がもしも省略形だとすれば、省略することは一般的にシステムが
一つ余計なステップを踏んで判断している可能性もあると思うので、
必ずしも良いことではない気がしますし・・・。

この辺りの裏事情(?)やどちらがより好ましいかなど、
ご存知の方がおられましたらぜひ教えてください。m(_ _)m

A 回答 (3件)

どちらでもいいです。



>でも後者がもしも省略形だとすれば、
逆です。前者が後者の冗長形です。手で書くなら後者が良いと思います。プログラムでHTMLを生成するときにプログラムの都合で前者のような出力をするケースがあるのでしょう。
    • good
    • 0
この回答へのお礼

プログラムの都合ってどんな時なのかな~。なぜ二通り存在することになったのか、不思議に思っています。ありがとうございました!

お礼日時:2012/02/25 19:43

RFC 3986 の 4.2 節に書かれています。



例えば、"tell:me" のような場合、これがスキーム tell でパス me からなる絶対 URI なのか、それとも tell:me という 1 個の相対 URI(相対パス)であるのか、判別できません。この場合、"./tell:me" とすれば、確実に相対パスであることが分かります。

他にも、"p/.././.././../q" のようなパスも正しい URI です。これは "../../q" と同義です。プログラムで URI を出力するとき、諸般の事情から余計なドットを取り除いた形にすることが難しく、とにかくつなげてしまえ、という場合があります。そんなときでも、一応は正しい場所を示すことができます。

参考URL:http://www.studyinghttp.net/cgi-bin/rfc.cgi?3986 …

この回答への補足

あ、何度も読み返して、少し分かってきました。(分かってないかもしれませんが・・・(^^; )

>コロン文字を含む path のセグメント (例えば、"this:that") は、
>それがスキーム名と間違えられるだろうから、相対パス参照の最初のセグメントとしては使用できない。
>そのようなセグメントは、相対パス参照を作るためには、
>ドットセグメントによって先行されなければならない (例えば、"./this:that")。

コロン文字を含む path のセグメント、というのを使ったことがないので、関係ないのかな、
と勝手に思ってしまいましたが、この記述を読むと
コロン文字を含まないパスでも"./"の方が何となく正しいあるいは好ましいものという印象を受けました。

> 確実に相対パスであることが分かります。

のようなお言葉がとても耳に心地良い(?!)です。
ありがとうございました!!

補足日時:2012/02/25 20:29
    • good
    • 0
この回答へのお礼

とても詳しいページのご紹介ありがとうございました!
専門用語が多く、難しくてちょっと理解できなかったのですが、
こういうのをご紹介いただきたかったのでとてもうれしかったです。
本題とは違いますが、URIが正しいということも学べました。
ありがとうございました!

お礼日時:2012/02/25 19:47

すくなくとも


href="./hello/test.html"
href="hello/test.html"
 はシステムとは関係ありません。

 ユーザーエージェントが、この文字列を読み取って解釈した時点でいずれも、そのファイルが
http:hoge.com/abc/index.html
 として取得したものでしたら、ブラウザはサーバーhoge.comに対して、HTTPプロトコルで
/abc/hello/test.html
 を要求します。
 ブラウザが混乱しない限り、まったく問題ありません。というか、ブラウザは混乱しないでしょう。

ただし、
/abc/hello/index.html
/abc/hello/
/abc/hello
についは、同じtest.htmlが表示されるように設定してあっも、サーバーへの負荷は異なります。
    • good
    • 0
この回答へのお礼

お返事をいただき、ありがとうございます♪
なるほど!「./」が付いているものも付いていないものも同じというのは、ブラウザが判断して、/から始まる絶対パスに変換して、サーバーにリクエストを送ってくれているんですね。質問の際、システムと書いてみましたが、どこがこれをやっているのだろう?と思っていたので、スッキリしました☆

実はこの質問のきっかけをお話させていただくと、私自身はWebページの作成はオーサリングソフトを一切使わずにやっていて、個人的には、href="./hello/test.html" の方が何となく明示的な感じがして好きなので、いつもそうしているのですが、先日友人のページ作りのお手伝いをしていて、その人のホームページビルダーがファイルの保存時に、オートコレクトよろしくこれ(./)を削除してしまうということを知り、「ほへ?何で?」と思い、興味を持ったのがきっかけでした。
そして、ORUKA1951さんも例に挙げて下さっていた、
/abc/hello/ → /abc/hello/index.html のような、裏では1つ余分なステップを踏んでいるケース
(ごくごくわずかでもサーバーへの負荷が異なるケース)をイメージしながら質問させていただきました。

どうして2通りの書き方が生まれてしまったのかな~?
あるいはどちらが本当は正しいとかを規定しているものがどこかに存在するのかなぁ~?
という私の素朴な疑問は、残念ながら疑問のままですが、仕組みが一つ分かって勉強になりました。
お付き合いいただき、本当にありがとうございました!

お礼日時:2012/02/25 20:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!