知らなかった。もしかして Web を支える技術には載ってました?(未読)
問題
- GoogleAjaxAPI を使って jQuery を読み込んでいた
- 開発、検証環境では http だが本番では https で動く
- http での読み込みを決め打ちしてたら IE で怒られた><
要件
- schemeの変化に自動で追随してほしい
Google Analytics とかどうしてんの? なんか scheme の判別して URL を組み立て直してるよ。あーじゃあこれ真似すればいいか、なんかでも面倒だな。
ここで神降臨!
Twitter / Yosuke HASEGAWA: @wtnabe script src="//exam …
@wtnabe <script src="//example.jp/foo.js">と書けば現在のschemeで読んでくれます。
……。ほんとだ。
RFC 2396
しかし実はこの根拠が分からなかった。なんか言われればそれでいいような気がするけど、scheme だけ欠けている URL を見たことがなかったから。でもちゃんと定義されていた。
RFC 2396 - Uniform Resource Identifiers (URI): Generic Syntax
absoluteURI = scheme ":" ( hier_part | opaque_part )
URI that are hierarchical in nature use the slash "/" character for
separating hierarchical components. For some file systems, a "/"
character (used to denote the hierarchical structure of a URI) is the
delimiter used to construct a file name hierarchy, and thus the URI
path will look similar to a file pathname. This does NOT imply that
the resource is a file or that the URI maps to an actual filesystem
pathname.
hier_part = ( net_path | abs_path ) [ "?" query ]
net_path = "//" authority [ abs_path ]
abs_path = "/" path_segments
(snip
The syntax for relative URI takes advantage of the <hier_part> syntax
of <absoluteURI> (Section 3) in order to express a reference that is
relative to the namespace of another hierarchical URI.
relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]
A relative reference beginning with two slash characters is termed a
network-path reference, as defined by <net_path> in Section 3. Such
references are rarely used.
えーと、これで見ると
//example.com/path/to/resource
は net_path として定義されていて、net_path だけの URL は relativeURI と定義されていることになる。なるほどー。
※ ちなみにちゃんと読んだら Google Analytics の tracking code が scheme 判別をしているのは scheme によって net_path が異なるからだった。確かにこの場合は判別して書き換えないとダメだね。