QA@IT

プロトコルを省略して "//example.com" で始める URL に、なにかデメリットはありますか?

13211 PV

CDN から画像/CSSを配信する場合、https:// のページでも問題なく動作させるために、プロトコルの表記をせずに // から始めることで元ページのプロトコルを継承する方法があります。

この方法には、なにかデメリットはありますか?
モバイル含むブラウザの対応状況、脆弱性、RFC 等の規約に反していないのかなど、教えていただきたいです。

例:

<img src="//cdn.example.com/logo.png" />
<script src="//cdn.example.com/script.js" type="text/javascript"></script>
<link href="//cdn.example.com/layout.css" rel="stylesheet" type="text/css" />
.class { background: url("//cdn.example.com/logo.png"); }

回答

手前味噌ですが、以前調べてみたときの記録を紹介します。

schemeのないURLは相対URL - あーありがち(2010-05-27)

RFC 2396 時点(もしかしたらその後何か変わってるかも)では普通に relative な URI として valid だと思います。

ブラウザの対応は当時調べた範囲(含むIE)では問題なかったのですが、ケータイ(非スマホ)まではきっちり調べてきれていません。

編集 履歴 (0)

「ステートフル JavaScript 」 の157ページにも書かれていました。引用します。

<!-- 最小化されたjQuery -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js></script>

この例ではURLの中でプロトコルを指定せず、いきなり//から始まっています。この記法はほとんど知られていませんが、読み込み元のページと同じプロトコルが利用されます。つまり、HTMLがHTTPSを使ってダウンロードされたならスクリプトも同様に安全にダウンロードされることになり、セキュリティの警告なども表示されません。このようなURLはRFCの仕様に適合した正当なものです。しかも、この形式のURLは幅広くサポートされており、Internet Explorer 3.0でも利用できます。
編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。