Czy jest jakiś minus za używanie wiodącego podwójnego ukośnika do dziedziczenia Protokołu w adresie URL? tj. src="//domain.com"

Mam arkusz stylów, który ładuje obrazy z zewnętrznej domeny i potrzebuję go do ładowania z https:// z bezpiecznych stron zamówienia i http: / / z innych stron, w oparciu o aktualny adres URL. Odkryłem, że uruchomienie adresu URL z podwójnym ukośnikiem dziedziczy bieżący protokół. Czy wszystkie przeglądarki obsługują tę technikę?

Html ex:

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

Css ex:

.class { background: url(//cdn.domain.com/logo.png); }
Author: hippietrail, 2011-01-11

6 answers

Jeśli przeglądarka obsługuje RFC 1808 Section 4, RFC 2396 Section 5.2, lub RFC 3986 Section 5.2, wtedy rzeczywiście użyje schematu URL strony dla odniesień zaczynających się od "//".

 83
Author: Remy Lebeau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-11 09:35:17

W przypadku użycia na link LUB @import, IE7 / IE8 pobierze plik dwa razy na http://paulirish.com/2010/the-protocol-relative-url/

Aktualizacja z 2014 roku:

Teraz, gdy SSL jest zachęcane dla wszystkich i nie ma problemów z wydajnością, technika ta jest teraz anty-wzorzec . Jeśli potrzebny zasób jest dostępny na SSL, to zawsze używaj zasobu https://.

 64
Author: meder omuraliev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-11 09:35:43

Jeden minus występuje, jeśli adresy URL są wyświetlane poza kontekstem strony internetowej. Na przykład wiadomość e-mail znajdująca się w kliencie poczty e-mail (np. Outlook) nie ma adresu URL, a gdy przeglądasz wiadomość zawierającą adres URL związany z protokołem, nie ma w ogóle oczywistego kontekstu protokołu (sama wiadomość jest niezależna od protokołu używanego do jej pobrania, Czy to POP3, IMAP, Exchange, uucp lub cokolwiek innego), więc adres URL nie ma protokołu, do którego należy się odnosić. Nie prowadziłem śledztwa. kompatybilność z klientami poczty e-mail, aby zobaczyć, co robią, gdy prezentują brakującą obsługę protokołu - domyślam się, że większość będzie zgadywać na http. Apple Mail odmawia wprowadzenia 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 tweety, wiadomości SMS, dokumenty Word itp.

Bardziej ogólne wyjaśnienie jest takie, że anonimowy adresy URL protokołu nie mogą działać w izolacji; tam musi być odpowiednim kontekstem. W typowej stronie internetowej dobrze jest więc w ten sposób ściągnąć bibliotekę skryptów, ale wszelkie Linki zewnętrzne powinny zawsze określać protokół. Próbowałem jednego prostego testu: //stackoverflow.com mapy do file:///stackoverflow.com we wszystkich przeglądarkach, w których próbowałem, więc naprawdę nie działają same.

 59
Author: Synchro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-15 18:57:39

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

HTTPS Everywhere kampania EFF sugeruje, aby używać https w miarę możliwości. W dzisiejszych czasach mamy pojemność serwera do serwowania stron internetowych zawsze zaszyfrowanych.

 3
Author: koppor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-15 17:24:24

Tylko dla kompletności. To było wspomniane w innym wątku:

'dwa ukośniki są wspólnym skrótem dla każdego protokołu is being used right "

if (plain http environment) {
use 'http://example.com/my-resource.js'
} else {
    use 'https://example.com/my-resource.js'
}

Proszę sprawdzić cały wątek.

 0
Author: escapedcat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:33

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

 -2
Author: Ramashish Baranwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-21 06:47:31