URL bez „http | https”

89

Właśnie dowiedziałem się od kolegi, że pominięcie części „http | https” adresu URL w łączu spowoduje, że będzie on używał dowolnego schematu używanego na stronie.

Na przykład, jeśli moja strona jest dostępna pod adresem http://www.example.com i mam link (zwróć uwagę na „//” na początku):

<a href="https://www.google.com">Google</a>

Ten link będzie prowadził do http://www.google.com .

Ale jeśli wejdę na stronę https://www.example.com z tym samym linkiem, przejdzie do https://www.google.com

Chciałem poszukać w Internecie więcej informacji na ten temat, ale mam problem z wymyśleniem dobrej frazy wyszukiwania. Jeśli wyszukuję „adresy URL bez protokołu HTTP”, zwracane strony dotyczą adresów URL w następującym formacie: „www.example.com”, co nie jest tym, czego szukam.

Czy nazwałbyś to pozbawionym schematów adresem URL? Adres URL bez protokołu?

Czy to działa we wszystkich przeglądarkach? Przetestowałem to w FF i IE 8 i działało w obu. Czy jest to część normy, czy powinienem przetestować więcej przeglądarek?

topher-j
źródło
1
Dla porównania (ponieważ zapytałeś, jakie terminy wyszukiwać), wyszukiwarka Google, która doprowadziła mnie do pierwotnego pytania StackOverflow, brzmiała: „bezwzględny adres URL bez protokołu”
David,
nie określasz, czy jest to http, czy https, więc przeglądarka decyduje za Ciebie, biorąc ostatnią stronę, zakładając, że link pochodzi z tej samej strony.
raym0nd
Dzięki David, link do duplikatu odpowiedział na wszystkie moje pytania
topher-j
1
@David: Dokładnie rzecz biorąc, nie nazwałbyś tego bezwzględnym adresem URL, gdyby nie miał protokołu; jest to raczej względny adres URL.
Gumbo

Odpowiedzi:

15

Nazywa się to odniesieniem do ścieżki sieciowej (brakująca część nazywa się schemelub protocol) zdefiniowane w RFC3986 sekcja 4.2

4.2 Względne odniesienie

Względne odwołanie korzysta ze składni hierarchicznej (sekcja 1.2.3), aby wyrazić odniesienie URI względem przestrzeni nazw innego hierarchicznego identyfikatora URI.

  relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

  relative-part = "//" authority path-abempty
                / path-absolute
                / path-noscheme
                / path-empty

Identyfikator URI, do którego odwołuje się odniesienie względne, znany również jako docelowy identyfikator URI, uzyskuje się przez zastosowanie algorytmu rozdzielczości odniesienia opisanego w sekcji 5.

Względne odniesienie, które zaczyna się od dwóch znaków ukośnika, jest określane jako odniesienie do ścieżki sieciowej (moje wyróżnienie); takie odniesienia są rzadko używane. Względne odwołanie, które zaczyna się od pojedynczego ukośnika, jest nazywane odwołaniem do ścieżki bezwzględnej. Względne odwołanie, które nie zaczyna się od ukośnika, jest nazywane odwołaniem do ścieżki względnej.

Segment ścieżki zawierający znak dwukropka (np. „To: tamto”) nie może być użyty jako pierwszy segment odniesienia do ścieżki względnej, ponieważ zostałby pomylony z nazwą schematu. Taki segment musi być poprzedzony kropką (np. „./This:that”), aby utworzyć odniesienie do ścieżki względnej.

Matas Vaitkevicius
źródło
// nie można użyć w tagu podstawowym w html. Ustawiam <base href = "// abc.com/" i względny adres URL obrazu <img src = "/ img / logo.jpg>. Jednak po otwarciu w przeglądarce łącze do obrazu stanie się file: /// abc. com / img / logo.jpg. Jakieś obejście?
Scott Chu,