web-dev-qa-db-ja.com

url / src / href属性内の2つのスラッシュ

可能性のある複製:
2つのスラッシュで始まるURI…どのように動作しますか?
現在のページの1つを保持するためにプロトコル(スキーム)を省略した絶対URL
スクリプトおよびリンクタグの//略記?誰もがこれを前に見たり使用したりしますか?

HTML5リセット のソースを調べていたとき、 次の行 に気付きました。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>

URLが2つのスラッシュで始まるのはなぜですか?これはhttp://の短縮形ですか?

122
Michael Parkin

「2つのスラッシュ」は、「現在使用されているプロトコルが何であれ」の一般的な省略形です。

「プロトコル相対URL」として最もよく知られています。これらは、例のJSファイルなどの要素をhttpまたはhttpsコンテキストからロードできる場合に特に役立ちます。プロトコル相対URLを使用することにより、実装を回避できます

if (window.location.protocol === 'http:') {
    myResourceUrl = 'http://example.com/my-resource.js';
} else {
    myResourceUrl = 'https://example.com/my-resource.js';
}

コードベース全体のロジックのタイプ(もちろん、example.comのサーバーがhttphttpsの両方を介してリソースを提供できると仮定します)。

顕著な実世界の例は、Magento E-Commerceエンジンです。パフォーマンス上の理由から、ショップのページはデフォルトでプレーンhttpを使用しますが、チェックアウトはhttpsが有効になっています。

ハードコーディングされたリソース(つまり、サイトのヘッダーのプロモーションバナー)が非プロトコル相対URL(つまりhttp://example.com/banner.jpg)によって参照されている場合、https対応のチェックアウトに到達した顧客はやや不親切に迎えられます

「このページには安全でない要素があります」

プロンプト-想像できるように、技術に精通していない平均的な人を捨てます。

ただし、前述のリソースが//example.com/banner.jpgを介して参照されている場合、ブラウザは適切なプロトコルを先頭に追加します。

tl; dr:http/httpsが混在する環境の可能性が少しでもある場合、リソースをロードするためにダブルスラッシュ/プロトコル相対URLを使用します。コンテンツを提供するホストがhttpとhttpsの両方が有効であると仮定します。

196
vzwick

要求の作成方法に応じて、httpsまたはhttpが自動的に追加されます。

10
Radu Cugut