Soru Http: // ile // yerine


"Her yerde çalışıyor gibi görünüyor" imgeleri, iframe'ler, linkler vb. Bu çok ilginç şeyler. - 12345
Evet, bir URI'yi çağıran herhangi bir yerde çalışmalıdır: görüntüler, bağlantılar, vb. Bunu kullanımda görmek nadir olabilir, ancak bu kesinlikle geçerlidir. - Jeff
Tüm bu upvoting adamlar ne ile? Bu soru kötü ya da bir şey değil, sadece merak ediyorum. Ama bahse girerim ki Chris 'ün itibarı bir etki yaratır. - Frederik Wordenskjold
@ Frederik: Çünkü çoğu insanın görünüşte farkında olmadığı büyüleyici ve kullanışlı bir numara. - SLaks
@ Frederik: Ne? - SLaks


Cevaplar:


Şema içermeyen göreli bir URL (http: veya https :) geçerli RFC 3986: "Tekdüzen Kaynak Tanımlayıcısı (URI): Genel Sözdizimi", Kısım 4.2. Bir istemci üzerinde boğaz varsa, o zaman müşterinin hatasıdır, çünkü RFC'de belirtilen URI sözdizimine uymuyorlar.

Örneğiniz geçerli ve çalışmalı. Ağır trafik işlemleri yapılan sitelerde bu göreceli URL yöntemini kullandım ve sıfır şikayetlerim vardı. Ayrıca sitelerimizi Firefox, Safari, IE6, IE7 ve Opera'da da test ediyoruz. Bu tarayıcıların hepsi URL biçimini anlıyor.


375
2018-02-15 00:39



"Bir istemci üzerinde boğuluyorsa, müşterinin hatasıdır, çünkü RFC'de belirtilen URI sözdizimine uymuyorlar." - Bence bu ilginç bir soru - ama bir müşterinin "spesifikasyon" u takip edip etmediği, bir web uygulamasında akıllıca olup olmadığının pek iyi bir standardı değil. - Matt Howell
Bu teknik az bilinen olsa da, tüm web tarayıcılarında desteklenmektedir. Sadece harika çalışıyor. - Ned Batchelder
Google'ın bunu neden analiz için kullanmadığını merak ediyorum. Document.location.protocol yöntemini kullanırlar. - Darryl Hein
@Darryl Hein Google'ın document.location.protocol yöntemini kullanacağına inanıyorum, çünkü sadece şemayı değil, URL'yi de değiştirir. Onlar gider SSL.google-analytics.com Belge https şemasını kullanıyorsa. - Nick Meldrum
google, Windows XP ağ yığını SNI'yi desteklemediğinden bunu kullanmaz. Buraya bakın: blogs.msdn.com/b/ieinternals/archive/2009/12/07/... . Bu nedenle, google analytics komut dosyasının IE6'da https yoluyla yüklenmesine izin verilmesi, bir sertifika hatasıyla sonuçlanacaktır. - Eilistraee


Herhangi bir ana tarayıcıda çalışması garanti edilir (% 0.05 pazar payına sahip tarayıcıları dikkate almıyorum). Heck, Internet Explorer 3.0'da çalışır.

RFC 3986 Aşağıdaki bölümlerden oluşan bir URI'yi tanımlar:

     foo://example.com:8042/over/there?name=ferret#nose
     \_/   \______________/\_________/ \_________/ \__/
      |           |            |            |        |
   scheme     authority       path        query   fragment

Göreceli URI'leri tanımlarken (Bölüm 5.2), bu bölümlerden herhangi birini, her zaman soldan başlayarak atlayabilirsiniz. Sözde kodda, şuna benziyor:

 result = ""

  if defined(scheme) then
     append scheme to result;
     append ":" to result;
  endif;

  if defined(authority) then
     append "//" to result;
     append authority to result;
  endif;

  append path to result;

  if defined(query) then
     append "?" to result;
     append query to result;
  endif;

  if defined(fragment) then
     append "#" to result;
     append fragment to result;
  endif;

  return result;

Tanımladığınız URI şeması olmayan bir göreli URI'dır.


147
2018-06-04 15:50



Evet sanırım şema ve otorite her zaman karşılıklı bağımlıydı. Olmaması mantıklı, ama çok yakın zamana kadar karşılaştığım bir şey değil. - Chris
Herhangi bir tarayıcıda çalışması garanti edilmez. Sadece RFC'yi takip eden tarayıcılarda çalışılması garanti edilir.
@Roger Pate: URI için RFC'yi takip etmeyen bir tarayıcı görmedim. Bu özel standart çok uzun zamandır var ... Sadece IE3.0'da test ettim ve bunu gayet iyi anlıyor. Bu bağlantıları anlamayan bir tarayıcıya düşerseniz, o kadar marjinal bir tarayıcıdır ki, önemli olmayacaktır. - Andrew Moore
@Andrew: Belki benden farklısınız, ama programlama bağlamında "garanti" dediğimde, "bunun muhtemelen başarısız olabileceği anlamına gelmez," sadece "sadece popüler uygulamalarda çalışırım" anlamına gelmez. ve test edildi. " Bunun dışında büyük bir anlaşma yapmak istemedim, ama bahsetmek için yeterince önemli görünüyordu.
@Roger: Evet, ancak web geliştirme bağlamında, marjinal tarayıcılar (<% 0.01 pazar payı) dikkate alınmaz. Bu, Windows'un tüm sürümlerinde bir API'nın var olduğunu ve birilerinin Şarapta desteklenmeyebileceğini söylemek için geliyor. - Andrew Moore


çalışmadığı durumlar var mı?

Ana sayfa file://O zaman muhtemelen işe yaramaz ( file://cdn.example.com/js_file.jsTabii ki yerel olarak da sağlayabilirsin).


75
2017-10-19 08:27



Huh, iyi nokta. - Darryl Hein
Yerel makinede html test eden çocuklar için bilmelisiniz! - Philip007
argh ... şaşmam benim script src="//..." çalışmıyordu! Yerel olarak html dosyasını açıyordum! - wisbucky
Herkes bu konuda bir yol biliyor mu? - ogc-nick
@ ogc-nick: Yerel bir web sunucusu çalıştırabilirsiniz. Bu günlerde, sıfır yapılandırma ile bol seçenek. Yine de, başka birçok şey gibi (XHR veya web çalışanları da dosya için çalışmıyor: domain) - Thilo


Birçok kişi buna Protokol Bağımlı URL diyor.

IE 7 & 8'de CSS dosyalarının çift indirilmesine neden olur.


40
2018-06-04 15:49



-1: Aslında şemadan daha az URI denir. - Andrew Moore
@Andrew: Düzenlendi. - SLaks
+1 güzel yan not. - jessegavin
@AndrewMoore Dışlanan "şey", "protokol bağıntısı" olarak adlandırılan web protokolünün daha mantıklı olduğunu gösterir. Daha önce hiç "ftp" veya "şema" olarak adlandırıldığını duymadım. - Cerin
@SLaks, biliyorum. Genellikle bir protokol belirtmek için kullanılırlar ... - Cerin


İşte cevabı bende HTML'nin gizli özellikleri:

Protokolden bağımsız bir mutlak kullanma   yol:

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

Tarayıcıda bir sayfa görüntüleniyorsa   HTTPS ile SSL, sonra istek   https protokolü ile bu varlık,   aksi halde HTTP ile istekte bulunur.

Bu o korkunç "Bu Sayfa engeller   Güvenli ve Güvenli Olmayan Hem İçeriyor   Öğeleri "IE, hata mesajı tutarak   tüm varlık talepleriniz   aynı protokol.

Uyarı: Bir <link> veya   Bir stylesheet, IE7 ve IE8 için @import    dosyayı iki kez indir. Diğer tüm   kullanır, ancak, sadece iyidir.


22
2018-02-15 02:02





Protokolü terk etmek mükemmel bir şekilde geçerlidir. URL spesifikasyonları yıllardır bu konuda çok açıktı ve henüz anlamayan bir tarayıcı buldum. Bu tekniğin neden daha iyi bilinmediğini bilmiyorum; HTTP / HTTPS sınırlarını geçme sorununa mükemmel bir çözümdür. Daha fazla burada: Http-https geçişleri ve göreli URL'leri


16
2018-06-03 08:20





çalışmadığı durumlar var mı?

Bu karışımı karıştırmak için, eğer yerel bir sunucu üzerinde çalışıyorsanız, işe yaramayabilir. Bir şema belirtmeniz gerekiyor, aksi halde tarayıcı src="//cdn.example.com/js_file.js"olduğu src="file://cdn.example.com/js_file.js"Bu kaynağı yerel olarak barındırmadığınız için kırılacak.

Microsoft Internet Explorer buna özellikle duyarlı görünüyor, şu soruya bakın: Internet Explorer'da jQuery'yi localhost (WAMP) üzerinde yükleyemiyor

Muhtemelen her zaman ihtiyaç duyduğunuz en az değişiklikle tüm ortamlarınızda çalışan bir çözüm bulmaya çalışacaksınız.

Tarafından kullanılan çözüm HTML5Boilerplate Kaynak doğru bir şekilde yüklenmediğinde bir geri dönüşe sahip olmaktır, ancak yalnızca bir çekle birlikte çalışırsanız çalışır:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<!-- If jQuery is not defined, something went wrong and we'll load the local file -->
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

GÜNCELLEŞTİRME: HTML5Boilerplate şimdi kullanır <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js protokolü göreli URL'leri kullanımdan kaldırmaya karar verdikten sonra, bkz. [burada] [3].


5
2018-04-13 08:17





Gnud'un referansını takiben RFC 3986 bölüm 5.2 diyor:

Şema bileşeni tanımlanmışsa, referansın belirtilmesi   bir şema adı ile başlar, sonra referans bir yorum olarak yorumlanır   mutlak URI ve biz bitti. Aksi halde, referans URI'sı şeması   temel URI'nin şema bileşeninden miras alınır.

Yani // doğru :-)


3
2018-06-04 15:49





Evet, bu belgelenmiştir RFC 3986, bölüm 5.2:

(edit: Oops, benim RFC başvurum eskiydi).


2
2017-09-03 10:28





Diğer cevapların da belirttiği gibi, gerçekten doğrudur. Yine de, bazı web tarayıcılarının, sunucunuzda yerel bir URL gibi istekte bulunarak bunlar için 404'leri ayarlayacağını unutmayın. (Çift eğik çizgi göz ardı eder ve tek bir eğik çizgi gibi davranırlar).

Bunları yakalamak ve yönlendirmek için web sunucunuza bir kural ayarlamak isteyebilirsiniz.

Örneğin, Nginx ile, şöyle bir şey eklersiniz:

location ~* /(?<redirect_domain>((([a-z]|[0-9]|\-)+)\.)+([a-z])+)/(?<redirect_path>.*) {
  return 301 $scheme:/$redirect_domain/$redirect_path;
}

Yine de, URI'larınızda dönemler kullanırsanız, özgüllüğü artırmanız veya bu sayfaları varolmayan alanlara yönlendirmeniz gerekeceğini unutmayın.

Ayrıca, bu, her bir sorgu için koşturmak için oldukça masif bir regex - Bence, uyumlu tarayıcıların çoğunluğu üzerinde bir (hafif) performans isabetiyle 404'lerle uyumlu olmayan tarayıcıları cezalandırmaya değer.


2
2018-05-29 14:19





JS dosyalarına referans olarak //somedomain.com kullanıldığında günlüklerimizde 404 hatası görüyoruz.

404'lere neden olan referanslar şöyle görünüyor: ref:

<script src="//somedomain.com/somescript.js" />

404 istek:

http://mydomain.com//somedomain.com/somescript.js

Bunların web sunucu günlüklerimizde düzenli olarak gösterilmesi ile şunları söylemek güvenlidir: Tüm tarayıcılar ve Botlar YAPMA onur RFC 3986 bölüm 4.2. En güvenli bahis, mümkün olduğunda protokolü dahil etmektir.


2
2017-11-21 19:11



Evet, ondan biraz uzaklaştım, ama 404'lerden dolayı değil (404'leri hiç görmedim ... eğer bir botu onurlandırmazsa, daha az umursamıyorum) - çünkü artık kaynak yüklemiyorum Diğer CDN'leri bu yüzden buna ihtiyacım yok (bunun yerine 1 veya 2 dosyaya olabildiğince küçültüyorum). - Darryl Hein
Lütfen protokolü dahil edin. Cordova uygulamasında protokol içermeyen referanslar kırılır. - pgorsira