Является ли URL, начинающийся с // действительным?

19

Мы можем увидеть много страниц HTML, используя src="//example.com/myjavascript.js" , чтобы включить .js , и пусть браузер использует http:// / https:// в зависимости от текущей схемы URL-адреса страницы.

Является ли это допустимым URI?

    
задан toutpt 09.08.2012 в 12:08
источник
  • См. также stackoverflow.com/questions/2018183/... –  koppor 15.12.2013 в 18:16
  • Возможный дубликат URI, начинающийся с двух косых черт ... как они себя ведут? –  Enigmativity 01.09.2017 в 03:56

3 ответа

28

Да, это определенно справедливо. Это относительный «относительный код» или «относительный протокол» URI. В спецификации с самого начала. Весьма полезно иметь дело с проблемами http / https.

Прочтите гораздо лучшее описание и оговорки: Можно ли заменить http: / / с // в & lt; script src="http: // ..." & gt ;?

Несколько соображений, о которых нужно помнить:

  • Есть некоторые незначительные проблемы в IE 7 & amp; 8 с двойной загрузкой
  • Если вы просматриваете HTML-страницу из файла, браузер заменит схему file:// и не загрузит ваш JS-файл с сервера, как с полным URL-адресом, начиная с http:// или https:// .
ответ дан Adam B 09.08.2012 в 12:23
  • Спасибо за разъяснение @Adam, я удалил свой комментарий с вопроса - вы узнаете что-то новое каждый день (если вы не будете осторожны) –  freefaller 09.08.2012 в 13:06
2

В качестве предупреждения ... мы столкнулись с проблемами с этой методологией, которые НЕ поддерживаются в Internet Explorer при использовании внутри тега HTML BASE (подтвержденные IE8 и 9, не тестировали других, прежде чем исправлять проблему).

После внедрения SSL на веб-сайте мы изначально обновили теги BASE в приложении, чтобы просто ссылаться на «//www.mydomain.com»: но шаблоны страниц сломались (только в IE) на всех сценариях, которые НЕ жить в корне сайта. Имеет смысл, поскольку тег BASE не собирал таблицу стилей или другие относительно связанные ресурсы, которые предполагали, что на них ссылаются от root, а не от вложенного местоположения.

Так как BASE URI был нашим собственным доменом, мы исправили проблему, установив значение тега BASE на « Ссылка ». Независимо от того, просматривает ли клиент сайт в режиме или в режиме SSL, по крайней мере, он будет работать в кросс-браузере и может ВСЕГДА найти его содержимое - и, постоянно заставляя https, мы гарантируем, что мы не получим никакого несоответствия содержания предупреждения в процессе, установив путь BASE к http-адресу при просмотре страницы с помощью https.

    
ответ дан Dave McHale 03.04.2013 в 15:05
0

Это действительно действительно , и я только что научился этому с трудом! Мы нарушили функцию настройки, поэтому вы всегда должны проверять URL-адрес, подобный этому (в .NET): Обратите внимание:

  • Белые пространства (Trim)
  • "условный" URI (UriKind.RelativeOrAbsolute)

    public bool IsValidUrl(string resourceUrl)
    {
        Uri uri;
        if (Uri.TryCreate(resourceUrl.Trim(), UriKind.RelativeOrAbsolute, out uri))
        {
            return uri.IsWellFormedOriginalString();
        }
    
        return false;
    }
    
ответ дан Major 30.09.2016 в 11:19