Tüm http: // linklerimi sadece // olarak değiştirebilir miyim?


240

Dave Ward diyor ki,

Tam olarak hafif okuma değil , RFC 3986'nın 4.2 bölümü protokolü (HTTP veya HTTPS) tamamen atlayan tam nitelikli URL'ler sağlar. Bir URL'nin protokolü atlandığında, tarayıcı bunun yerine temel belgenin protokolünü kullanır.

Basitçe söylemek gerekirse, bu "protokolsüz" URL'ler, böyle bir referansın denediğiniz her tarayıcıda çalışmasına izin verir:

//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js

İlk başta garip görünüyor, ancak bu "protokolsüz" URL, hem HTTP hem de HTTPS aracılığıyla kullanılabilen üçüncü taraf içeriğine başvurmanın en iyi yoludur.

Bu, varlıklarımızın hem HTTP hem de HTTPS aracılığıyla kullanılabileceğini varsayarak, HTTP sayfalarında gördüğümüz bir grup karışık içerik hatasını kesinlikle çözecektir.

Bu tamamen çapraz tarayıcı uyumlu mu? Başka uyarılar var mı?


Bu tekniği IE blogunda bir süre önce okudum. Ama denediğimde oldukça iyi çalışmıyor. Sitem HTTPS ile sunulduysa, tarayıcı (Chrome) hala protokol içermeyen URL'ler için HTTP kullanıyordu.
Christopher Ramírez

10
UYARI: HTTP 3xx yönlendirmelerinde ASLA kullanıcı düzensiz URI'leri unutmayın! HTTP üstbilgileri bu URL biçimiyle uyumlu değil. Şemaya bağlı olarak yeniden yönlendirmeniz gerekiyorsa mod_rewrite veya benzerlerini kullanın.
user2596282

1
@ user2596282 Chrome ve Firefox'un modern sürümlerindeki denemeler, HTTP 1.1'deki (hâlâ taslak halinde) revizyon gibi sizinle aynı fikirde değil. HTTPbis çalışma grubu tarafından tanımlanan teknik özellikler (bkz. svn.tools.ietf.org/svn/wg/httpbis/draft-ietf-httpbis/latest/… ). Belki de söyledikleriniz bazı tarayıcılar için doğrudur; özellikle yer başlıklarındaki protokole bağlı URL'lerde başarısız olan herhangi bir şey biliyor musunuz?
Mark Amery


Onları kullanmayın, çirkin ve gereksizdirler.
IllidanS4 Monica'nın

Yanıtlar:


204

Yayınlamadan önce iyice test ettim. Tarayıcı görüntülerinde test edilebilecek tüm tarayıcılardan yalnızca protokol göreli URL'sini doğru işlemeyen birini bulabildim: Dillo adlı karanlık bir * nix tarayıcı .

Hakkında geri bildirim aldığım iki dezavantaj var:

  1. Sayfanın temel protokolü: /// olacağından, tarayıcınızda yerel bir dosyayı "açtığınızda" protokolsüz URL'ler beklendiği gibi çalışmayabilir. Özellikle, CDN tarafından barındırılan bir varlık gibi harici bir kaynak için protokol içermeyen URL'yi kullanırken. Http: // localhost adreslerine karşı test etmek için Apache veya IIS gibi yerel bir web sunucusu kullanmak iyi çalışıyor.
  2. Görünüşe göre, protokol içermeyen URL'leri doğru işlemeyen en az bir iPhone özet akışı okuyucu uygulaması var. Hangisinin sorun olduğunu veya ne kadar popüler olduğunu bilmiyorum. Bir JavaScript dosyasını barındırmak için, RSS okuyucuları genellikle JavaScript içeriğini zaten yok saydığı için bu büyük bir sorun değildir. Bununla birlikte, bu URL'leri RSS aracılığıyla ortak gösterilmesi gereken içerik içindeki resimler gibi medya için kullanıyorsanız sorun olabilir (ancak, tek bir platformdaki bu tek okuyucu uygulaması muhtemelen çok az sayıda okuyucuya neden olur).

33
IE7 / 8, protokole bağlı URL'leri (şematik URI'ler olarak da bilinir) çoğu durumda iyi ele alırken, bu tür URL'lerle stil sayfaları belirtildiğinde, bunları iki kez indirir . ( Steve Souders diyor )
lucasrizoli

3
IE6 göreli bir URI (yani önde gelen eğik çizgiler birini kaldırma) dönüştürmek çalışır deniyorum. Bu bir linkunsurda. Örneğin //fonts.googleapis.com/css?family=Rokkitt:400,700, belirtirken IE6 yüklenmeye çalışır http://mysite.com/fonts.googleapis.com/css/<...>. Çok iyi değil!
CBono

2
Günlükleri, protokolü olmayan bağlantıları kullanmaya çalışıyorum ve onları da doğru şekilde işlemeyen web örümcek robotları (kaynak bilinmiyor) gibi görünen örneklerini buldum.
Kzqai

3
Günlüklerimde protokol içermeyen URL'lerle ilgili olmayan çok şey gördüm. Bu örümceklerin çoğu inanılmaz derecede kötü yazılmış.
Dave Ward

11
Bu URL'ler olduklarını anlamak önemlidir değil Protokol- az ama Protokol- göreceli . Protokollerini içeriklerinden alırlar ve çoğu tarayıcıda dosya url'leri gibi davranacakları bir bağlamdan yoksundurlar, etkili bir şekilde amaçlanan içeriği yüklemeyecekleri anlamına gelirler. Http üzerinden teslim edildiğinde çalışırlarsa da, sayfayı kaydederseniz ve aynı HTML'yi yerel bir dosyadan yüklerseniz, bağlam farklı olduğu için çalışmayacaklarını göreceksiniz. Bunları kullanmanız gereken tek bağlam http ve https'dir.
Ocak'ta Synchro

37

Biri olmadığı sorusu olabilir tüm bağlantılarını değiştirmek biri olup olmadığı sorusunu dikkate protokole bağlı tartışmalı olabilir olmak gerekir bunu. Paul Irish'a göre :

2014.12.17: Artık SSL herkes için teşvik edildiğinden ve performans kaygıları olmadığından, bu teknik artık bir anti-kalıptır. İhtiyacınız olan varlık SSL'de varsa, her zaman https: // öğesini kullanın .


Ben de aynısını düşünüyordum. Https üzerinden kullanılabiliyorsa harici bir öğeyi http üzerinden indirmenin anlamı nedir - ana site http kullanıyor olsa bile (kullanmaması gerekir, ancak bu başka bir konudur).
joonas.fi

1
@ joonas.fi düşünebildiğim tek şey, bazı tarayıcılar tarafından oluşturulabilecek karışık HTTP / HTTPS uyarılarından kaçınmaktır
Ohad Schneider

3
@Ohad_Schneider uyarıları, yalnızca belge güvenli (https), ancak güvenli olmayan öğeler (http) üzerinden yüklenmişse tetiklenir. Ne öneriyordu belge güvenli üzerinde yüklü olsa bile, her zaman güvenli üzerinde varlık yükleyebilirsiniz. "Protokole bağlı URL" nin tamamını gereksiz hale getirerek güvenli kullanmamanız için hiçbir uyarı ve neden yok.
joonas.fi

1
@Ohad_Schneider oh özür dilerim, sanırım söylediklerini yanlış yorumladım. Belgeniz http bittiğinde varlıkların https üzerinden yüklenmesi herhangi bir uyarı oluşturmamalıdır. Ancak belgeniz https bittiğinde öğeleri http üzerinden yüklemek, (muhtemelen varsayılan olarak, en azından Chrome'da engellenir). Sitenize https üzerinden hizmet verdiğiniz ve harici varlıkların yalnızca http altında mevcut olduğu durumdan bahsediyor musunuz? Evet, bu bir sorun olabilir, ancak içeriklerini https üzerinden sunmayan ciddi bir üçüncü taraf hizmeti olduğunu düşünmüyorum, yoksa yine de işten çıkmalılar. :)
joonas.fi

@ joonas.fi Wut? O_o Birisinin HTTPSed site (o zaman) protokolü göreli URL'leri varsa, üçüncü taraf varlıklarını HTTP üzerinden almanın çözümüne yardımcı olmaz - hiçbir şekilde. Her neyse, HTTPS sayfanızda temiz yeşil SSL logosuna sahip olmamak, üçüncü tarafların henüz HTTPS'yi desteklememesi nedeniyle tekrar HTTP'ye geri vermekten daha iyidir.
poige


15

Evet, ağ yolu başvuruları RFC 1808'de zaten belirtilmiştir ve tüm tarayıcılarla çalışmalıdır.



1
whit Evet, "Başka uyarılar var mı?" ? ;)
Caspar Kleijne

2
@Caspar Kleijne: Evet'i cümlenin geri kalanıyla açıkladım.
Gumbo

1
Casper, Gumbo aslında şu iki soruyu cevaplıyordu: "Bu tamamen çapraz tarayıcı uyumlu mu? Başka uyarılar var mı?" Evet, ilk sorunun cevabıdır.
Darren Griffith

4

Bu tamamen çapraz tarayıcı uyumlu mu? Başka uyarılar var mı?

Bunu sadece karışıma atmak için, yerel bir sunucu üzerinde geliştiriyorsanız, çalışmayabilir. Aksi tarayıcı farz edebilir, bir plan belirtmek gerekir src="//cdn.example.com/js_file.js"ise src="file://cdn.example.com/js_file.js"yerel olarak bu kaynağı barındıran değiliz çünkü kıracak olan.

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

Muhtemelen her zaman tüm ortamlarınızda en az değişiklik gerektiren bir çözüm bulmaya çalışacaksınız.

HTML5Boilerplate tarafından kullanılan çözüm , kaynak doğru yüklenmediğinde bir geri dönüşe sahip olmaktır , ancak bu yalnızca bir onay eklerseniz ç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>

Bu yanıtı burada da gönderdim .

GÜNCELLEME: HTML5Boilerplate artık <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">protokole bağlı URL'leri kullanımdan kaldırmaya karar verdikten sonra kullanıyor , buraya bakın .


1

Kullanırken bu sorunları yaşamadım: //etkialanı.com - ancak başında iki nokta üst üste eklemeniz gerekir. Yoast bir süre önce bu konuda iyi bir yazı yazdı. Ama blog yazıları yığınında kayboldu.


ek: nerede yararlı olduğunu belirtmek için aşağı oy. Yanlışlıkla sol her yer ":" bağlantısını kırdı
soymak

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.