相対パスを「//」で始める書き方
画像とかのパスを//で始めるのは何か問題があるのかな - Webtech Walker
迂闊にも知りませんでした・・・
こういう書き方できるんだ・・・
しかも、少し前に前職の某後輩に「そんなことできねぇよ」って自信120%で答えた記憶が・・・orz
で、それで終わっては技術屋として名が廃るので調べてみました。
どうやらRFC的にはこの書き方OKらしい。
以下の十分に定義された基底 URI
http://a/b/c/d;p?q
を持つ表現において、相対的参照はその目標 URI を以下のように変形する。
(中略)
"//g" = "http://g"
とのことなので。
この例わかりにくいけど、aとgを具体的にexample.comとかドメイン名に置き換えればわかりやすいかと。
で。
いくらRFC的に正しくても、実際のブラウザで動作しなければ意味がない。
特に携帯ブラウザが怪しいと思うので、いくつか試してみた。
Windows IE6 | ○ |
---|---|
Windows Firefox3.0 | ○ |
DoCoMo F904i | ○ |
Au(KDDI) W51S | ○ |
SoftBank 830T | ○ |
意外にも携帯端末も手元の端末では問題なく動作した。もちろん全機種で動く保証はないが。
IE6も、元ネタ記事のコメントで「IEだと2回リクエストが飛ぶ」というコメントがあったが、
ログを監視しながら試したがその現象は確認できなかった。何か他の要因があるのかもしれないが。
これができると何がうれしいかというと。
例えば、SSLと非SSL両方でアクセスするページに画像があって、画像は負荷対策などの目的で違うFQDN(サブドメインとか)を向いている場合とか。
- http://example.com/hoge.html
- https://example.com/hoge.html
の両方に、画像
- http://img.example.com/image.gif
を入れたいとして。
これをそのままhttpsのページにいれると、たしかIEで
「保護されてないコンテンツが含まれてる」みたいなダイアログが出てしまうので
httpsなページでは、画像もhttpsでリクエストしたいと。
そういうときに
<img src="//img.example.com/image.gif" alt="">
って書けて、こうすると、httpなページならhttpで、httpsなページならhttpsで、画像を取りに行ってくれるので、先に挙げたIEのうざいメッセージもでない・・・はず。
(試してないので嘘ついてたらごめん)