2011-01-11 6 views
139

Mam arkusz stylów, który ładuje obrazy z domeny zewnętrznej i potrzebuję go załadować z https: // z bezpiecznych stron zamówień i http: // z innych stron, na podstawie obecny adres URL. Zauważyłem, że uruchomienie adresu URL z podwójnym ukośnikiem dziedziczy bieżący protokół. Czy wszystkie przeglądarki obsługują tę technikę?Czy istnieje jakaś przewaga za używanie wiodącego podwójnego ukośnika do dziedziczenia protokołu w adresie URL? tj. src = "// domena.com"

html ex:

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

css ex:

.class { background: url(//cdn.domain.com/logo.png); } 
+1

czy to spowalnia witrynę ??? – TheBlackBenzKid

+2

nie ma powodu, aby miało to jakikolwiek wpływ na wydajność, z wyjątkiem przypadków, które Meder podał poniżej w swojej odpowiedzi. –

+0

Wygląda na coś. Kilka miesięcy temu Google Developers zaczęli używać tej konwencji na stronie hostowanych bibliotek JavaScript. Https://developers.google.com/speed/libraries/devguide –

Odpowiedz

80

Jeśli przeglądarka obsługuje RFC 1808 Section 4, RFC 2396 Section 5.2 lub RFC 3986 Section 5.2, to będzie rzeczywiście użyć schematu URL strony dla referencji, które zaczynają się od " // ".

+7

jest to obsługiwane we wszystkich głównych przeglądarkach? (IE7, IE8, FF, Chrome, Safari) –

+22

Biorąc pod uwagę, że pierwszy RFC, aby to opisać, RFC 1808, został napisany 15 lat temu, a odnośniki URL są kluczem do funkcjonalności strony internetowej, myślę, że można bezpiecznie powiedzieć, że prawie wszystkie główne przeglądarki obsługują to już teraz. Ale jedyny sposób, by wiedzieć na pewno, to po prostu spróbować samemu i zobaczyć, co się stanie. –

+2

To pytanie zostało powiązane z osobą, która zadała podobne pytanie, a znalazłem ją w RFC 1630 rok wcześniej (podano inaczej, ale nadal zezwalano na dany format). Mogłoby to być w takiej czy innej formie z dokumentu, który był kiedyś w 'ftp: // info.cern.ch/pub/www/doc/http-spec.txt' od 1991 roku, jeśli ktoś ma archiwum Kopiuj. –

64

Przy stosowaniu na link lub @import, IE7/IE8 będzie pobrać plik dwa razy http://paulirish.com/2010/the-protocol-relative-url/

aktualizacji od 2014:

Teraz SSL jest encouraged for everyone i doesn’t have performance concerns, technika ta jest obecnie anty-wzór. Jeśli wymagany zasób jest dostępny w protokole SSL, zawsze zawsze korzysta z zasobu https://.

+17

Naprawiono w IE9, FWIW. – EricLaw

+19

HAHAHAHAHAHA. Jak zwykle nie działa to poprawnie na starszych IE. O mój! –

+0

@EricLaw jest naprawiony w IE9 bez względu na tryb renderowania lub tylko w trybie standardowym i nadal jest uszkodzony w trybie Quirks? – scunliffe

59

Jedna z wad występuje, gdy adresy URL są wyświetlane poza kontekstem strony internetowej. Na przykład wiadomość e-mail umieszczona w kliencie poczty e-mail (powiedzmy Outlook) nie zawiera adresu URL, a podczas przeglądania wiadomości zawierającej adres URL protokołu nie ma w ogóle oczywistego kontekstu protokołu (sama wiadomość jest niezależna) protokołu używanego do pobierania, niezależnie od tego, czy jest to POP3, IMAP, Exchange, uucp czy cokolwiek innego), więc adres URL nie ma protokołu, z którym należy się względnie. Nie badałem kompatybilności z klientami poczty e-mail, aby zobaczyć, co robią, gdy prezentowane są z brakującym narzędziem obsługi protokołu - domyślam się, że większość zgadnie na http. Firma Apple Mail odmawia podania adresu URL bez protokołu. Jest to analogiczne do sposobu, w jaki względne adresy URL nie działają w wiadomościach e-mail z powodu podobnie brakującego kontekstu.

Podobne problemy mogą wystąpić w innych kontekstach innych niż HTTP, takich jak w tweety, wiadomości SMS, dokumentów Worda itp

Im bardziej ogólne wyjaśnienie, że anonimowe adresy protokołu nie może pracować w odosobnieniu; tam musi być odpowiednim kontekstem. Na typowej stronie internetowej tak dobrze jest wciągnąć bibliotekę skryptów w ten sposób, ale wszelkie linki zewnętrzne powinny zawsze określać protokół. Spróbowałem jednego prostego testu: //stackoverflow.com map do file:///stackoverflow.com we wszystkich przeglądarkach, które wypróbowałem, więc one naprawdę nie działają same.

+5

To naprawdę dobry punkt, tak naprawdę myślałem o tym, gdy zasnąłem ostatniej nocy. Inną kwestią jest to, że wersja 'https' lub' http' może nie być dostępna, nie zawsze można założyć, że tak jest. –

+1

Poza przeglądarką jesteś sam, że tak powiem. Nie ma żadnego powiedzenia, czy e-mail lub inny klient wie o javascript lub css itp. Więc jest to raczej kwestia sporna dotycząca adresów URL? – chris

+0

Nie jest to kwestia sporna. Wielu klientów poczty e-mail obsługuje JS i przeglądarki z pewnością mogą podczas ładowania z 'file: //'. Jest to niewielki przypadek, ale kiedy się pojawia, jest ważny. –

3

Przyczyną może być dostarczenie przenośnych stron internetowych. Jeśli strona zewnętrzna nie jest transportowana w postaci zaszyfrowanej (http), dlaczego połączone skrypty powinny być szyfrowane? Wydaje się to być niepotrzebną utratą wydajności. W przypadku, gdy strona zewnętrzna jest bezpiecznie transportowana w postaci zaszyfrowanej (https), to połączona treść powinna być również zaszyfrowana. Jeśli strona jest zaszyfrowana, połączona treść nie, IE wydaje się wydawać ostrzeżenie Mixed Content. Powodem jest to, że atakujący może manipulować skryptami po drodze. Zobacz dłuższą dyskusję na stronie http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1.

Kampania z EFF w wersji HTTPS Everywhere sugeruje korzystanie z https, gdy tylko jest to możliwe.Mamy obecnie pojemność serwera do obsługi stron internetowych zawsze zaszyfrowanych.

-2

Wydaje się być dość powszechną techniką. Nie ma minusów, pomaga tylko ujednolicić protokół dla wszystkich zasobów na stronie, więc powinien być używany wszędzie tam, gdzie to możliwe.

Powiązane problemy