web-dev-qa-db-ja.com

2つのスラッシュで始まるURI ...それらはどのように動作しますか?

最近私はworkingこのようなコードブロックを見ました:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

また、RFC 2396(URI構文)およびRFC 2616(HTTP 1.1)によると、2つのスラッシュで始まるこれらのURIは有効ですが、残念ながらRFCでは実際に説明されていません。

ブラウザーがこれらのURIを処理する/すべき/処理する方法を説明するリソースを誰かに教えてもらえますか?

91
pagid

探しているリソースは RFC 3986 です。

セクション4.2およびセクション5.4を参照してください。後者からの引用:

参考解像度の例

明確に定義されたベースURIを持つ表現内:

    http://a/b/c/d;p?q

相対参照は、次のようにターゲットURIに変換されます。

  "g:h"           =  "g:h"
  "g"             =  "http://a/b/c/g"
  "./g"           =  "http://a/b/c/g"
  "g/"            =  "http://a/b/c/g/"
  "/g"            =  "http://a/g"
  "//g"           =  "http://g"
  "?y"            =  "http://a/b/c/d;p?y"
  "g?y"           =  "http://a/b/c/g?y"
  "#s"            =  "http://a/b/c/d;p?q#s"
  "g#s"           =  "http://a/b/c/g#s"
  "g?y#s"         =  "http://a/b/c/g?y#s"
  ";x"            =  "http://a/b/c/;x"
  "g;x"           =  "http://a/b/c/g;x"
  "g;x?y#s"       =  "http://a/b/c/g;x?y#s"
  ""              =  "http://a/b/c/d;p?q"
  "."             =  "http://a/b/c/"
  "./"            =  "http://a/b/c/"
  ".."            =  "http://a/b/"
  "../"           =  "http://a/b/"
  "../g"          =  "http://a/b/g"
  "../.."         =  "http://a/"
  "../../"        =  "http://a/"
  "../../g"       =  "http://a/g"

これは、ベースURIがhttp://a/b/c/d;p?qであり、//gを使用すると、相対参照がhttp://gに変換されることを意味します。

86
Daniel Vassallo

これらは、 プロトコル相対URLです。 現在のプロトコルを維持しながら、アドレスを指します。

この表記は、「混合コンテンツ」問題を回避するためによく使用されます(同じHTTPSページ上のhttpおよびhttpsリソースについて不平を言うIE警告メッセージ)。

アップデート:RFC 3986の公式ドキュメント

2つのスラッシュ文字で始まる相対参照は、ネットワークパス参照と呼ばれます。そのような参照はめったに使用されません。単一のスラッシュ文字で始まる相対参照は、絶対パス参照と呼ばれます。スラッシュ文字で始まらない相対参照は、相対パス参照と呼ばれます。

61
Pekka 웃

これらはプロトコルに依存しないURLです。 Webページがhttpsで提供される場合、要求はhttpsを使用します(httpの場合はhttp)。

Paul Irishは、定型コードに含めることで、それらを普及させたようです。

30
meder omuraliev

httpまたはhttpsに依存しないだけでなく、また、fileftpなど.

つまり、ローカルホストのブラウザーで。htmファイルを直接開くと、ブラウザーは/ /as as file protocolとページは機能しません。 Electron、PhoneGapなどのツールを使用する「ネイティブ」アプリとして、パックされたWebサイトで問題を引き起こす可能性があります。

例:

<script src="//mywebsite.com/resource.js"></script>

<script src="file://mywebsite.com/resource.js"></script>
1
lukyer