İki eğik çizgiyle başlayan URI… nasıl davranırlar?


93

Son zamanlarda şu şekilde çalışan kod blokları gördüm :

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

RFC 2396 (URI Sözdizimi) ve RFC 2616 (HTTP 1.1) 'e göre iki eğik çizgiyle başlayan bu URI'ler geçerlidir, ancak maalesef RFC'ler bunları gerçekten açıklamaz.

Tarayıcıların bu URI'leri nasıl işleyeceğini / işlemesi gerektiğini / yapacağını açıklayan bir kaynağa kimse işaret edebilir mi?

Yanıtlar:


86

Aradığınız kaynak RFC 3986'dır .

Bölüm 4.2 ve Bölüm 5.4'e bakınız. İkincisinden alıntı yapmak:

Referans Çözünürlük Örnekleri

Aşağıdakilerin iyi tanımlanmış temel URI'sine sahip bir gösterim içinde:

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

göreceli bir referans, aşağıdaki gibi hedef URI'sine dönüştürülür:

  "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"

Bu, temel URI olduğunda http://a/b/c/d;p?qve kullandığınızda //g, göreli referansın http://g.


4
yani bu, http veya https'yi bu şekilde belirlemek için javascript kullanmak için bir çözüm olabilir mi, işe yarayacak ne olursa olsun
Ibu

Üst seviyeye ulaşmanız gerektiğinden, kullanın ../g- mevcut protokolü kullanacak ve yol açacaktır http://a/b/c/g.
Boris S

Acemi bir soru olabilir, ancak bu temel URI nereden geliyor? tarayıcının url çubuğu? sunucu? html sayfasındaki bir etiket?
kodlayıcı eşyalar

1
@thenaglecode: cevap, duruma göre değişir. XML / XHTML / HTML5'de kullanabilirsiniz xml:baseiçin herhangi bir öğe üzerinde açıkça ayarlayın . HTML'de varsayılan olarak temel URI, sayfanın aynı URI'sıdır (ancak bir CSS dosyasında, temel URI, CSS uri'sine göredir, HTML'yi içermez , ancak daha eski IE bunu HTML'ye göre yapmıştır). Diğer protokollerde ve dillerde farklı olabilir (örneğin XSLT'de mevcut öğeye bağlıdır). Ayrıca bakınız <html:base>.
Abel

1
Önemli - sonuç her zaman değil http! Sayfa bağlamının protokolüne bağlıdır. Bağlam altına yüklenmişse http://a/b/c/d;p?q, o zaman //ggerçekten de çözülür http://g. Ancak sayfa o http://a/b/c/d;p?qzaman olduğu gibi yüklenmişse sonuç olacaktır https://g. Ayrıca file://(sayfa diskten yüklenir) gibi diğer protokolleri de unutmayın - bu kesinlikle size çok fazla baş ağrısı verecektir.
Andrey Tserkus

62

Bunlar protokole bağlı URL'lerdir. Mevcut protokolü koruyarak bir adrese işaret ederler.

Bu gösterim genellikle "karışık içerik" sorununu önlemek için kullanılır ( aynı HTTPS sayfasındaki kaynaklar httpve hakkında şikayet eden bir IE uyarı mesajı https).

Güncelleme: RFC 3986'daki resmi belgeler :

İki eğik çizgi karakteriyle başlayan göreli referans, ağ yolu referansı olarak adlandırılır; bu tür referanslar nadiren kullanılır. Tek bir eğik çizgi karakteriyle başlayan göreli referans, mutlak yol referansı olarak adlandırılır. Eğik çizgi karakteriyle başlamayan göreceli bir referansa göreceli yol referansı denir.


Bilmek harika, ancak bu, popüler tarayıcılarla ne kadar uyumlu? Hızlı bir arama bana IE6 ile çalışmadığını söyledi ... bu bir HTML5 özelliği mi?
Shane N

4
@Shane bu tüm tarayıcılarda çalışmalıdır. IE6'da çalışmadığını iddia eden bir bağlantınız var mı?
Pekka

4
Bir IE1 özelliği olduğundan oldukça eminim!
Jon Hanna

artı protokolden bahsetmek için
Tawfik Khalifeh


1

Bunun yalnızca http veya https'den bağımsız olmadığını, aynı zamanda dosya , ftp vb.

Bu, .htm dosyasını doğrudan tarayıcınızda localhost'ta açarsanız , tarayıcının // dosya protokolü olarak çözümleneceği ve sayfanızın çalışmayacağı anlamına gelir. Electron, PhoneGap vb. Araçları kullanan "yerel" uygulama olarak paketlenmiş web sitelerinde sorunlara neden olabilir.

Misal:

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

-e

<script src="file://mywebsite.com/resource.js"></script>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.