ありがとう。また会おう。

ゆるいかんじで。かたのちからぬいて。やってます。

相対パスを「//」で始める書き方

画像とかのパスを//で始めるのは何か問題があるのかな - 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のうざいメッセージもでない・・・はず。

(試してないので嘘ついてたらごめん)