URL でプロトコルを継承するために先頭の二重スラッシュを使用することに何か欠点はありますか?つまりsrc="//ドメイン.com"
-
09-10-2019 - |
質問
外部ドメインから画像を読み込むスタイルシートがあり、現在の URL に基づいて、セキュア オーダー ページからは https:// から、他のページからは http:// から読み込む必要があります。URL を二重スラッシュで始めると、現在のプロトコルが継承されることがわかりました。すべてのブラウザがこの手法をサポートしていますか?
html 例:
<img src="//cdn.domain.com/logo.png" />
css例:
.class { background: url(//cdn.domain.com/logo.png); }
解決
ブラウザがサポートしている場合 RFC 1808セクション4, RFC 2396セクション5.2, 、 また RFC 3986セクション5.2, 、その後、「//」で始まる参照のページURLのスキームを実際に使用します。
他のヒント
で使用する場合 link
また @import
, 、IE7/IE8はファイルを2回ダウンロードします http://paulirish.com/2010/the-protocol-relative-url/
2014年からの更新:
今、SSLはそうです 皆のために励まされます と パフォーマンスの懸念はありません, この手法は現在、アンチパターンになりました. 。必要な資産がSSLで利用可能である場合、 いつも 使用
https://
資産。
URLがWebページのコンテキストの外で表示されている場合、1つの欠点が発生します。たとえば、電子メールクライアント(たとえば、Outlook)に座っている電子メールメッセージには効果的にURLがありません。プロトコル関連URLを含むメッセージを表示している場合、明らかなプロトコルコンテキストはまったくありません(メッセージ自体は独立しています。 POP3、IMAP、Exchange、UUCPなどであろうと、それを取得するために使用されるプロトコルのうち、URLには関連するプロトコルがありません。私は、電子メールクライアントとの互換性を調査して、不足しているプロトコルハンドラーで提示されたときに彼らが何をするかを確認していません。ほとんどの人がHTTPで推測すると推測しています。 Apple Mailは、プロトコルなしでURLを入力できることを拒否します。同様に欠落しているため、相対URLが電子メールで機能しない方法に類似しています。
同様の問題は、ツイート、SMSメッセージ、単語文書などの他の非HTTPコンテキストで発生する可能性があります。
より一般的な説明は、匿名のプロトコルURLが単独で動作できないということです。そこの しなければならない 関連するコンテキストになります。したがって、典型的なWebページでは、スクリプトライブラリをそのように引き込むことは問題ありませんが、外部リンクは常にプロトコルを指定する必要があります。簡単なテストを試しました: //stackoverflow.com
マップへ file:///stackoverflow.com
すべてのブラウザで私はそれを試したので、彼らは 本当 自分で働かないでください。
その理由は、ポータブルWebページを提供することです。外側のページが暗号化されていない場合(HTTP)、リンクされたスクリプトを暗号化する必要があるのはなぜですか?これは不必要なパフォーマンスの損失のようです。外側のページが暗号化された(HTTPS)安全に輸送される場合、リンクされたコンテンツも暗号化する必要があります。ページが暗号化されている場合、リンクされたコンテンツはそうではありません。つまり、 混合コンテンツ 警告。その理由は、攻撃者が途中でスクリプトを操作できるためです。見る http://ie.microsoft.com/testdrive/browser/mixedcontent/default.html?o=1 より長い議論のために。
どこでもhttps EFFからのキャンペーンは、可能な限りHTTPSを使用することを示唆しています。最近では、常に暗号化されたWebページを提供するサーバー容量があります。
完全に。これは別のスレッドで言及されました:
if (plain http environment) {
use 'http://example.com/my-resource.js'
} else {
use 'https://example.com/my-resource.js'
}
完全なスレッドを確認してください。
今ではかなり一般的なテクニックのようです。マイナス面はありません。ページ上のすべての資産のプロトコルを統合するのに役立つため、可能な限り使用する必要があります。