Чи є якісь недоліки використання провідного подвійного косого кута для успадкування протоколу в URL-адресі? тобто src = “// domain.com”


148

У мене є таблиця стилів, яка завантажує зображення із зовнішнього домену, і мені це потрібно для завантаження з https: // із захищених сторінок замовлення та http: // з інших сторінок на основі поточної URL-адреси. Я виявив, що запуск URL-адреси з подвійною косою рисою успадковує поточний протокол. Чи всі браузери підтримують цю техніку?

html ex:

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

css ex:

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

1
це сповільнює роботу сайту ???
TheBlackBenzKid

2
немає причин, що це не повинно впливати на продуктивність, за винятком випадків, про які Медер перераховано нижче у своїй відповіді.
Роб Волк

Схоже, я був на чомусь. Кілька місяців тому розробники Google почали використовувати цю конвенцію на своїй сторінці розміщених бібліотек Javascript developers.google.com/speed/libraries/devguide
Rob Volk

10
Що робити, якщо такий HTML-файл завантажується локально (відкривається безпосередньо у браузері)? Схоже, Firefox (28 у цьому випадку) потім не завантажує віддалений ресурс. Має сенс, оскільки тоді HTTP не є батьківським протоколом. Але це було б, на мій погляд, недоліком.
Доктор Ян-Філіп Герк

Відповіді:


86

Якщо браузер підтримує RFC 1808 Розділ 4 , RFC 2396 Розділ 5.2 або RFC 3986 Розділ 5.2 , тоді він дійсно використовує схему URL-адреси сторінки для посилань, що починаються з "//".


8
це підтримується у всіх основних браузерах? (IE7, IE8, FF, Chrome, Safari)
Rob Volk

22
Враховуючи, що перший RFC, який описав це, RFC 1808, був написаний 15 років тому, а посилання на URL є ключовими для функціональності веб-сайту, я думаю, що можна впевнено сказати, що майже всі основні браузери його підтримують до цього часу. Але єдиний спосіб точно знати - це просто спробувати сам і побачити, що відбувається.
Ремі Лебо

2
Це питання пов'язане з тим, хто задає подібне запитання, і я знайшов його в RFC 1630 роком раніше (вказано інакше, але все ж допускає відповідний формат). Це може бути в тій чи іншій формі документа, який раніше був ftp://info.cern.ch/pub/www/doc/http-spec.txtу 1991 році, якби хтось мав копію в архіві.
Джон Ханна

4
"2014.12.17: Тепер, коли SSL заохочується для всіх і не має проблем із ефективністю, ця методика тепер є антидіаграмою. Якщо потрібний вам актив доступний у SSL, то завжди використовуйте актив https: //." (Цитата цитати з stackoverflow.com/a/27999789 )
joonas.fi

@ joonas.fi Це міркування є другим. SSL як і раніше впливає на продуктивність і не потребує у великій кількості застосувань. Я вважаю за краще використовувати його, але не хочу, щоб це було застосовано, наприклад, у коді, який я розгортаю.
Отей

64

При використанні на linkабо @importIE7 / IE8 завантажить файл двічі за http://paulirish.com/2010/the-protocol-relative-url/

Оновлення від 2014 року:

Тепер, коли SSL заохочується для всіх і не має проблем з роботою , ця методика тепер є анти-зразком . Якщо потрібний вам актив доступний у SSL, то завжди використовуйте його https://.


18
Зафіксовано в IE9, FWIW.
EricLaw

@EricLaw - це фіксований в IE9 незалежно від режиму візуалізації або лише в режимі стандартів і все ще порушений у режимі Quirks?
scunliffe

Я майже впевнений, що це було зафіксовано у всіх режимах у сканері lookahead. Ви десь бачили інакше?
EricLaw

SSL, безумовно , має ефективність. EFF не записує серверно-серверні інтерфейси, а інший сайт має невеликі технічні знання. Крім того, є анти-шаблоном припускати, що постачальник веб-сайту буде застосовувати такі обмеження. Таким чином, люди, які пишуть програми CSS та javascript, не повинні брати участь у питанні протоколу.
Отей

63

Один недолік виникає, якщо ваші URL-адреси переглядаються поза контекстом веб-сторінки. Наприклад, повідомлення електронної пошти, що сидить у клієнті електронної пошти (скажімо, Outlook), фактично не має URL-адреси, і коли ви переглядаєте повідомлення, що містить URL-адресу щодо протоколу, взагалі немає очевидного контексту протоколу (саме повідомлення незалежне протоколу, який використовується для його отримання, будь то POP3, IMAP, Exchange, uucp чи інше), тому URL-адреса не має відношення до протоколу. Я не досліджував сумісність з клієнтами електронної пошти, щоб побачити, що вони роблять, коли вони представлені з відсутньою обробкою протоколів - я припускаю, що більшість здогадається на http. Apple Mail відмовляється вводити URL без протоколу. Це аналогічно тому, що відносні URL-адреси не працюють в електронній пошті через аналогічно відсутній контекст.

Подібні проблеми можуть виникнути і в інших не HTTP-контекстах, таких як твіти, SMS-повідомлення, документи Word тощо.

Більш загальне пояснення полягає в тому, що URL-адреси анонімних протоколів не можуть працювати ізольовано; там повинен бути відповідний контекст. Таким чином, на звичайній веб-сторінці добре використовувати бібліотеку сценаріїв таким чином, але будь-які зовнішні посилання завжди повинні вказувати протокол. Я спробував один простий тест: //stackoverflow.comкарти для file:///stackoverflow.comвсіх браузерів, в яких я його пробував, так що вони справді не працюють самі по собі.


5
Це дійсно хороший момент, я насправді думав про це, коли заснув минулої ночі. Інша проблема полягає в тому, що версія httpsабо httpверсія насправді не доступна, ви не завжди можете припустити, що вона є.
Веслі Мерч

1
Поза межами браузера ви самостійно, так би мовити. Немає жодної казки, чи знає електронна пошта чи інший клієнт про JavaScript або css і т. Д. Отже, це майже суперечка щодо відносних URL?
chris

Не суперечка. Багато клієнтів електронної пошти підтримують JS та браузери, безумовно, можуть під час завантаження з file://. Це незначна корисна скринька, але коли вона з’являється, це важливо.
Черв-Дай Бейтс-Кобашигава

Я б хотів, щоб було способом вказати використання http, якщо тільки поточний URL не є https, в цьому випадку використовуйте https , а не вказуйте використовувати той же протокол, з яким завантажувались поточні сторінки , що фактично //є тим, що є.
Черв-Дай Бейтс-Кобашигава

2
Якщо ви вказали, наприклад <base href="https://www.google.com">, ви можете переглядати вміст поза веб-сторінкою. або <img src="//www.google.com/images/srpr/logo11w.png">або<img src="images/srpr/logo11w.png">
зиг

3

Причиною може бути надання портативних веб-сторінок. Якщо зовнішня сторінка не транспортується зашифрованою (http), чому слід пов'язані сценарії шифрувати? Це здається непотрібною втратою продуктивності. У разі, якщо зовнішня сторінка надійно транспортується зашифрованою (https), то і пов'язаний вміст теж повинен бути зашифрований. Якщо сторінка зашифрована, пов’язаний вміст ні, IE, схоже, видає попередження про змішаний вміст . Причина в тому, що зловмисник може маніпулювати сценаріями в дорозі. Див. Http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 для більш тривалої дискусії.

HTTPS Everywhere кампанія з EFF пропонує використовувати протокол HTTPS , коли це можливо. У наші дні є потужність сервера для обслуговування веб-сторінок, завжди зашифрованих.


0

Просто для повноти. Про це згадувалося в іншій темі:

"Дві прямі косої риски" - це звичайна стенограма для "будь-якого протоколу, який використовується зараз".

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

Перевірте повну нитку.


-2

Здається, зараз це досить поширена техніка. Недоліків немає, він лише допомагає уніфікувати протокол усіх активів на сторінці, тому його слід використовувати, де це можливо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.