先頭の二重スラッシュを使用してURLのプロトコルを継承することの欠点はありますか?つまり、src =“ // domain.com”


148

外部ドメインから画像をロードするスタイルシートがあり、現在のURLに基​​づいて、セキュアオーダーページからhttps://から、他のページからhttp://からロードする必要があります。ダブルスラッシュでURLを開始すると、現在のプロトコルを継承することがわかりました。すべてのブラウザがこの手法をサポートしていますか?

html ex:

<img src="//cdn.domain.com/logo.png" />

css ex:

.class { background: url(//cdn.domain.com/logo.png); }

1
これはサイトを遅くしますか???
TheBlackBenzKid

2
Mederが以下の回答に挙げた場合を除いて、これがパフォーマンスに影響する理由はありません。
Rob Volk

何かに夢中になっていたようです。数か月前、Google DevelopersはHosted Javascriptライブラリページdeveloper.google.com/speed/libraries/devguide
Rob Volk

10
そのようなHTMLファイルがローカルに読み込まれた場合(ブラウザーで直接開いた場合)はどうなりますか?Firefox(この場合は28)のように見えますが、リモートリソースは読み込まれません。HTTPは親プロトコルではないため、理にかなっています。しかし、私の意見では、それは不利になるでしょう。
Jan-Philip Gehrcke博士、2014年

回答:


86

ブラウザがRFC 1808セクション4RFC 2396セクション5.2、またはRFC 3986セクション5.2をサポートしている場合、「//」で始まる参照にはページURLのスキームが使用されます。


8
これはすべての主要なブラウザでサポートされていますか?(IE7、IE8、FF、Chrome、Safari)
Rob Volk

22
それを記述した最初のRFCであるRFC 1808が15年前に作成され、URL参照がWebサイト機能の鍵であることを考えると、ほとんどすべての主要なブラウザーが今ではそれをサポートしていると言っても差し支えないと思います。しかし、確実に知る唯一の方法は、自分で試して何が起こるかを確認することです。
レミールボー、2011年

2
この質問は、同様の質問をしている人からリンクされていました。私はそれを1年前にRFC 1630で見つけました(言い方は異なりますが、問題の形式は許可しています)。ftp://info.cern.ch/pub/www/doc/http-spec.txtアーカイブのコピーがあれば、1991年に始まった当時の文書の形になっていた可能性があります。
ジョンハンナ

4
「2014.12.17:すべての人にSSLが推奨され、パフォーマンスの懸念がないため、この手法はアンチパターンになりました。必要なアセットがSSLで利用できる場合は、常にhttps://アセットを使用してください。」(stackoverflow.com/a/27999789から引用した引用)
joonas.fi

@ joonas.fiその推論はソフォモリックです。SSLは依然としてパフォーマンスに影響を与え、多くのアプリケーションでは不要です。私は確かにそれを使用することを好みますが、たとえば、私が展開するコードでそれを強制したくありません。
Otheus

64

linkまたは@importで使用すると、IE7 / IE8はhttp://paulirish.com/2010/the-protocol-relative-url/ごとに2回ファイルをダウンロードします

2014年からの更新:

今、SSLがされていることを皆のための奨励パフォーマンスの懸念を持っていないこの技術は現在、アンチパターンです。必要なアセットがSSLで利用できる場合は、常にそのhttps://アセットを使用してください。


18
IE9、FWIWで修正されました。
EricLaw、2011年

@EricLawは、レンダリングモードに関係なく、または標準モードでのみIE9で修正されていますが、互換モードではまだ壊れていますか?
scunliffe 2013

これが先読みスキャナーのすべてのモードで修正されたことはほぼ間違いありません。他にどこかで見たことがありますか?
EricLaw

SSLは確かにないパフォーマンスへの影響を持っています。EFFはサーバー/サーバーインターフェイスを記述しておらず、他のサイトには技術的な専門知識はほとんどありません。さらに、Webサイトのベンダーがそのような制限を強制すると想定することは、反パターンです。したがって、CSSおよびJavaScriptアプリケーションを作成する人は、プロトコルの質問に頼るべきではありません。
Otheus

63

1つの欠点は、URLがWebページのコンテキスト外で表示される場合に発生します。たとえば、電子メールクライアント(たとえば、Outlook)にある電子メールメッセージには事実上URLがなく、プロトコル相対URLを含むメッセージを表示している場合、明白なプロトコルコンテキストはまったくありません(メッセージ自体は独立しています) POP3、IMAP、Exchange、uucpなどに関係なく、URLを取得するために使用されるプロトコルのURLに関連するプロトコルはありません。欠落しているプロトコルハンドラーが表示されたときに何が行われるかを確認するために、電子メールクライアントとの互換性を調査していません。ほとんどの場合、httpで推測されると思います。Apple Mailは、プロトコルなしでURLを入力することを拒否します。これは、同様にコンテキストが欠落しているために相対URLが電子メールで機能しない方法に類似しています。

同様の問題は、ツイート、SMSメッセージ、Word文書など、HTTP以外の他のコンテキストでも発生する可能性があります。

より一般的な説明は、匿名プロトコルのURLは単独では機能しないということです。関連するコンテキストが必要です。したがって、一般的なWebページでは、このようにスクリプトライブラリを取り込むことで問題ありませんが、外部リンクでは常にプロトコルを指定する必要があります。私は1つの簡単なテストを試してみました。試してみたすべてのブラウザーでに//stackoverflow.comマップするfile:///stackoverflow.comため、実際には単独では機能しません。


5
これは本当に良い点です、私は昨夜眠りについたときに私は実際にこれについて考えていました。もう1つの問題は、httpsまたはhttpバージョンが実際には利用できない可能性があることです。常に利用可能であるとは限りません。
ウェズリー・マーチ

1
ブラウザーの外では、いわば自分で操作します。メールや他のクライアントがjavascriptやcssなどについて知っているかどうかは言うまでもありません。したがって、これは相対URLについてはかなり重要なポイントですか?
クリス

議論の余地はありません。多くの電子メールクライアントはJSをサポートし、ブラウザはからの読み込み時に確実にサポートできますfile://。それはマイナーなユースケースですが、それが出てきたときにそれは重要です。
Jun-Dai Bates-Kobashigawa 2014

私がやる指定する方法があるなあ現在のURLがhttpsにある場合を除き、使用HTTPは、その場合の使用HTTPS、むしろ指定するよりも、現在のページを装填したのと同じプロトコルを使用することを効果的にするものである、//です。
Jun-Dai Bates-Kobashigawa 2014

2
egを指定すると<base href="https://www.google.com">、Webサイドの外側でコンテンツを表示できます。いずれ<img src="//www.google.com/images/srpr/logo11w.png"><img src="images/srpr/logo11w.png">
ジグ

3

その理由は、ポータブルなWebページを提供するためかもしれません。外部ページが暗号化されて転送されない場合(http)、リンクされたスクリプトを暗号化する必要があるのはなぜですか?これは不必要なパフォーマンスの低下のようです。外部ページが安全に暗号化されて転送される場合(https)、リンクされたコンテンツも暗号化する必要があります。ページが暗号化されている場合、リンクされたコンテンツは暗号化されていないため、IEは混合コンテンツの警告を発行するようです。その理由は、攻撃者が途中でスクリプトを操作できるためです。より詳しい説明については、http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o = 1を参照してください。

EFF のHTTPS Everywhereキャンペーンでは、可能な限りhttpsを使用することを推奨しています。最近は常に暗号化されたWebページを提供するサーバー容量があります。



-2

今ではかなり一般的なテクニックのようです。欠点はありません。ページ上のすべてのアセットのプロトコルを統一するのに役立つだけなので、可能な限り使用する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.