Dave Ward mówi:
Nie jest to dokładnie lekka interpretacja, ale sekcja 4.2 RFC 3986 zapewnia w pełni kwalifikowane adresy URL, które całkowicie pomijają protokół (HTTP lub HTTPS). Gdy protokół URL zostanie pominięty, przeglądarka używa zamiast tego protokołu dokumentu bazowego.
Mówiąc prościej, te „bez protokołu” adresy URL pozwalają, aby taki odnośnik działał w każdej przeglądarce, w której wypróbujesz:
//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js
Na początku wygląda dziwnie, ale ten „bez protokołu” adres URL jest najlepszym sposobem na odwołanie się do treści stron trzecich, które są dostępne zarówno przez HTTP, jak i HTTPS.
To z pewnością rozwiązałoby wiele błędów o mieszanej zawartości, które widzimy na stronach HTTP - zakładając, że nasze zasoby są dostępne zarówno przez HTTP, jak i HTTPS.
Czy to jest całkowicie kompatybilne z różnymi przeglądarkami? Czy są jakieś inne zastrzeżenia?
źródło
Odpowiedzi:
Dokładnie przetestowałem to przed publikacją. Ze wszystkich przeglądarek dostępnych do testowania na Browsershots mogłem znaleźć tylko taką, która nie obsługiwała poprawnie względnego adresu URL protokołu: niejasna przeglądarka * nix o nazwie Dillo .
Są dwie wady, o których otrzymałem opinię:
źródło
link
elemencie. Na przykład podczas określania//fonts.googleapis.com/css?family=Rokkitt:400,700
IE6 próbuje załadowaćhttp://mysite.com/fonts.googleapis.com/css/<...>
. Nie zbyt dobrze!Pytanie, czy można zmienić wszystkie linki na zależne od protokołu, może być dyskusyjne, biorąc pod uwagę, czy należy to zrobić. Według Paula Irisha :
źródło
Jeśli używasz adresów URL bez protokołu do ładowania arkuszy stylów, IE 7 i 8 pobiorą je dwukrotnie: http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/
Tak więc należy unikać CSS, jeśli lubisz dobrą wydajność.
źródło
Tak, odniesienia do ścieżki sieciowej zostały już określone w RFC 1808 i powinny działać ze wszystkimi przeglądarkami.
źródło
Wystarczy wrzucić to do miksu, jeśli tworzysz na lokalnym serwerze, może nie działać. Musisz podać schemat, w przeciwnym razie przeglądarka może zakładać, że
src="//cdn.example.com/js_file.js"
tosrc="file://cdn.example.com/js_file.js"
, co złamie ponieważ nie jesteś gospodarzem tego zasobu lokalnie.Microsoft Internet Explorer wydaje się być szczególnie wrażliwy na to, zobacz to pytanie: Nie można załadować jQuery w Internet Explorerze na localhost (WAMP)
Prawdopodobnie zawsze starałbyś się znaleźć rozwiązanie, które działa we wszystkich środowiskach przy minimalnej ilości potrzebnych modyfikacji.
Rozwiązaniem używanym przez HTML5Boilerplate jest wycofanie się, gdy zasób nie zostanie poprawnie załadowany, ale działa to tylko wtedy, gdy uwzględnisz czek:
Tutaj także opublikowałem tę odpowiedź .
AKTUALIZACJA: HTML5Boilerplate używa teraz
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
po podjęciu decyzji o wycofaniu względnych adresów URL protokołu, patrz tutaj .źródło
Nie miałem tych problemów podczas używania: //domain.com - ale musisz dodać dwukropek na początku. Yoast już dawno o tym napisał. Ale zagubił się w stosie postów na blogu.
źródło
Jeśli chcesz się upewnić, że wszystkie żądania są uaktualnione do bezpiecznego protokołu, istnieje prosta opcja użycia żądań aktualizacji nagłówka Polityki bezpieczeństwa niezabezpieczonych
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests
źródło