Какая разница между использованием "http://" и "//" в src или href?

Я видел, что некоторые сайты используют //somedomain.com/images/img.jpg vs, используя http://somedomain.com/images/img.jpg, который также включает http:.

Есть ли разница между этими двумя? Браузер просто исправляет недостающие http:, и эти люди ленивы? Мне любопытно за рассуждениями.

Ответ 1

Если вы уже находитесь на сайте через http, предполагается, что вы говорите о http и подключаетесь к тому же серверу по тому же протоколу. То же самое с https. Если вы находитесь на http и хотите перейти на https, вам нужно указать протокол в href.

Ответ 2

Не то, что я видел раньше, но это действительная URI-ссылка. Из грамматики:

URI-reference = URI | relative-ref

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

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

где в качестве абсолютного URI:

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

Для получения дополнительной информации не стесняйтесь читать остальные RFC3986

Ответ 3

URL-адрес, относящийся к схеме, особенно полезен, когда вы обслуживаете веб-сайт HTTPS, и вы хотите поделиться тем же статическим контентом, как таблицы стилей, изображения, сценарии и т.д. с сайта HTTP. Hardcoding http: в ссылках статического контента, таких как <link href>, <script src>, <img src> и т.д., И просмотр самой веб-страницы над https: приведет к тому, что средний веб-браузер будет вызывать предупреждение о безопасности, такое как следующий известный IE предупреждения о безопасности:

alt text

alt text

Работа с "небезопасным" контентом по URL-адресу, относящемуся к схеме, устранит эту проблему.

Ответ 4

//somedomain.com/images/img.jpg - вполне допустимый синтаксис URI по RFC 3986: Раздел 4.2.

Это относится к текущему scheme, и поэтому может быть очень полезно при переключении между http и https, потому что вы выиграли Не нужно указывать схему.

Все современные браузеры поймут этот формат, включая IE 6.

Ответ 5

Я никогда не видел //somedomain.com/images/img.jpg и не считаю его законным.

Я видел /images/img.jpg, что означает "использовать текущий домен". Это полезно, если у вас есть несколько веб-адресов (например, aaaaa.com и aaaaa.net), указывающих на один и тот же сайт.