2010-07-08 5 views
11

Widziałem niektóre witryny używać //somedomain.com/images/img.jpg vs przy użyciu http://somedomain.com/images/img.jpg, który obejmuje również http:, jak również.Jaka jest różnica między używaniem "http: //" i "//" w src lub href?

Czy istnieje różnica między tymi dwoma? Czy przeglądarka właśnie koryguje brakujące http: i te osoby są leniwe? Jestem ciekawy za rozumowaniem.

+1

Kiedy mówisz, że "widziałeś witryny", gdzie je widziałeś? Czy jest wydrukowany, czy nazwa linku na stronie internetowej? –

+0

mam na myśli, wyświetlając ich kod źródłowy. nie w drukowanym artykule ani nic podobnego. – chadley

Odpowiedz

11

Jeśli jesteś już na stronie za pośrednictwem http, zakłada się, że mówisz o http i łączysz się z tym samym serwerem za pomocą tego samego protokołu. To samo z https. Jeśli jesteś na http i chcesz przejść do https, musisz określić protokół w href.

+0

, więc byłoby to używane na stronach, które można wyświetlać na "http" lub "https"? – chadley

+3

@chadley - zamiar jest mniej do użytku lokalnego, ale raczej do zdalnego użytku. Jeśli 'superanalytics.com' oferuje zarówno HTTP, jak i HTTPS, może poprosić Cię o dołączenie jego skryptu analitycznego do identyfikatora URI' // superanalytics.com/analytics.js'.W ten sposób, jeśli korzystasz z protokołu HTTP, SuperAnalytics również. Jeśli korzystasz z HTTPS, SuperAnalytics też. A potem nie dostaniesz tych paskudnych "To bezpieczna strona z niezabezpieczonymi rzeczami!" ostrzeżenia. – Matchu

+0

dziękuję za wyjaśnienie matchu. to ma sens teraz, gdy wskazałeś przykład. – chadley

-1

Nigdy nie widziałem //somedomain.com/images/img.jpg i nie sądzę, że jest legalne.

Widziałem /images/img.jpg, co oznacza "użyj bieżącej domeny". Pomocne jest, jeśli masz kilka adresów internetowych (np. Aaaa.com & aaaa.net) wskazujących tę samą witrynę.

+1

Jest to zgodne z prawem. –

7

Nie to, co widziałem wcześniej, ale jest to poprawne odniesienie URI. Z gramatyki:

URI-reference = URI | relative-ref 

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

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

gdzie jako bezwzględny URI jest:

URI   = scheme ":" hier-part [ "?" query ] [ "#" fragment ] 

Aby uzyskać więcej informacji, zachęcamy do zapoznania się z resztą RFC3986

+0

+1. To jest świetne! Użyję go teraz wszędzie! (Przynajmniej dla linków do plików na serwerze, które hostują treść statyczną). –

+0

Należy zauważyć, że oznacza to, że nie ma powodu, aby używać dwóch ukośników w praktyce - tylko jeden będzie traktowany jako bezwzględna ścieżka. – Chuck

+0

Myślę, że ta odpowiedź nie trafia w sedno. Jest ważny, ale również funkcjonalny. Zobacz odpowiedź @ rakuo15. – Matchu

2

//somedomain.com/images/img.jpg jest całkowicie poprawny składni URI zgodnie RFC 3986: Section 4.2.

Jest względny w stosunku do bieżącego scheme i dlatego może być bardzo przydatny podczas przełączania między http i https, ponieważ nie trzeba określać schematu.

wszystkich nowoczesnych przeglądarkach zrozumie tego formatu, w tym IE 6.

3

Schemat względne adresy URL są szczególnie przydatne, gdy jesteś obsługujących witrynę HTTPS i chcesz podzielić się tą samą statyczną zawartość jak arkusze stylów, obrazów, skrypty i tak dalej, jak z witryny HTTP. Hardcoding http: w statyczny linków jak <link href>, <script src>, <img src> i tak dalej i oglądania samą stronę na https: spowodowałoby średni webbrowser pop ostrzeżenie zabezpieczeń jak następujących znanych alerty zabezpieczeń IE:

alt text

alt text

Podanie "niezabezpieczonej" treści przez URL zależny od schematu rozwiązałoby ten problem.

Powiązane problemy