Допустимо ли заменить http: // на // в <script src = "http: // ...">? - PullRequest
451 голосов
/ 15 февраля 2009

У меня есть следующий элемент:

<script type="text/javascript" src="https://cdn.example.com/js_file.js"></script>

В этом случае сайт HTTPS, но сайт также может быть только HTTP. (Файл JS находится в другом домене.) Мне интересно, допустимо ли для удобства сделать следующее:

<script type="text/javascript" src="//cdn.example.com/js_file.js"></script>

Мне интересно, допустимо ли удалить http: или https:?

Кажется, он работает везде, где я тестировал, но есть ли случаи, когда он не работает?

Ответы [ 14 ]

2 голосов
/ 04 июня 2010

Да, это задокументировано в RFC 3986 , раздел 5.2:

(редактировать: Ой, моя ссылка на RFC устарела).

1 голос
/ 21 ноября 2013

Шаблон, который я вижу на html5-шаблоне :

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

Работает плавно по разным схемам, таким как http, https, file.

0 голосов
/ 27 января 2019

1. Резюме

Ответ за 2019 год: вы все еще можете использовать относящиеся к протоколу URL-адреса, но этот метод анти-шаблон .

Также:

  1. У вас могут быть проблемы с разработкой.
  2. Некоторые сторонние инструменты могут не поддерживать их.

Переход с относительных к протоколу URL-адресов на https:// было бы неплохо.


2. Актуальность

Этот ответ актуален для января 2019 года. В будущем данные этого ответа могут устареть.


3. Анти-шаблон

3,1. Аргументация

Пол Айриш - инженер-фронтовик и адвокат разработчика для Google Chrome - запись 2014, декабрь :

Теперь, когда SSL рекомендуется для всех и не имеет проблем с производительностью , эта техника теперь антишаблон . Если нужный вам актив доступен по SSL, то всегда используйте https:// актив.

Разрешение фрагменту запрашивать по HTTP открывает двери для атак, таких как недавняя атака GitHub "Человек на стороне" . Всегда безопасно запрашивать HTTPS-ресурсы, даже если ваш сайт работает по протоколу HTTP, однако обратное не соответствует действительности .

3,2. Другие ссылки

3,3. Примеры


4. Процесс разработки

Например, я пытаюсь использовать clean-console .

  • Файл примера KiraCleanConsole__cdn_links_demo.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>clean-console without protocol demonstration</title>
    <!-- Really dead link -->
    <script src="https://unpkg.com/bowser@latest/bowser.min.js"></script>
    <!-- Package exists; link without “https:” -->
    <script src="//cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>
    <!-- Package exists: link with “https:” -->
    <script src="https://cdn.jsdelivr.net/npm/gemini-scrollbar/index.js"></script>
</head>
<body>
    Kira Goddess!
</body>
</html>
  • выход:
D:\SashaDebugging>clean-console -i KiraCleanConsole__cdn_links_demo.html
checking KiraCleanConsole__cdn_links_demo.html
phantomjs: opening page KiraCleanConsole__cdn_links_demo.html

phantomjs: Unable to load resource (#3URL:file://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js)


phantomjs:   phantomjs://code/runner.js:30 in onResourceError
Error code: 203. Description: Error opening //cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js: The network path was not found.

  phantomjs://code/runner.js:31 in onResourceError

phantomjs: Unable to load resource (#5URL:https://unpkg.com/bowser@2.1.0/bowser.min.js)


phantomjs:   phantomjs://code/runner.js:30 in onResourceError
Error code: 203. Description: Error downloading https://unpkg.com/bowser@2.1.0/bowser.min.js - server replied: Not Found

  phantomjs://code/runner.js:31 in onResourceError

phantomjs: Checking errors after sleeping for 1000ms
2 error(s) on KiraCleanConsole__cdn_links_demo.html

phantomjs process exited with code 2

Ссылка //cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js действительна, но я получаю сообщение об ошибке.

Обратите внимание на file://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js и прочитайте Thilo и bg17aw ответы о file://.

Я не знал об этом поведении и не мог понять, почему у меня такие проблемы, как это для pageres .


5. Сторонние инструменты

Я использую URL, по которым можно кликать Пакет Sublime Text. Используйте его, я могу просто открыть ссылки из моего текстового редактора в браузере.

CSS links examples

Обе ссылки в примере действительны. Но первая ссылка, которую я могу успешно открыть в браузере, использует кликабельные URL, вторая ссылка - нет. Это может быть не очень удобно.


6. Заключение

Да

  1. Если у вас есть проблемы, как в пункте Developing process, вы можете настроить рабочий процесс разработки.
  2. В противном случае у вас есть проблемы, как в пункте Third-party tools, вы можете добавить инструменты.

Но вам не нужны эти дополнительные проблемы. Чтение информации по ссылкам в элементе Anti-pattern: относящиеся к протоколу URL устарели.

0 голосов
/ 26 апреля 2018

Поскольку ваш пример связан с внешним доменом, если вы используете HTTPS, вам следует убедиться, что внешний домен также настроен для SSL. В противном случае ваши пользователи могут увидеть ошибки SSL и / или ошибки 404 (например, более ранние версии Plesk хранят HTTP и HTTPS в отдельных папках). Для CDN это не должно быть проблемой, но для любого другого веб-сайта это может быть.

Примечание: проверено при обновлении старого веб-сайта, а также работает в части URL META REFRESH.

...