Подтвердить что ты не робот

Относительный путь, но для порта?

Мы все знакомы с относительными путями: относительный путь к ./images/hello.jpg из http://www.domain.com/hey ссылок на http://www.domain.com/hey/images/hello.jpg.

Проблема: Как вы указываете относительный путь к http://www.domain.com:1234, когда находитесь в http://www.domain.com/hey?

4b9b3361

Ответ 1

Этого можно достичь с помощью JavaScript, установив свойство window.location.port.

<a href="#" onclick="javascript:window.location.port=8080">go</a>

Ответ 2

Вы не можете изменить какую-либо часть полномочий (например, часть хоста: порт) в относительных URL-адресах. См. Алгоритм, описанный в раздел 5.2.2 RFC 3986 чтобы увидеть, как интерпретируются относительные URL-адреса. Важно отметить, что полномочия просто копируются из базового URL-адреса или из разрешаемого URL-адреса, а структура полномочий никогда не интерпретируется. Это означает, что вы не можете изменить ни одну из ее частей, включая часть порта.

Здесь алгоритм в псевдокоде, скопированный из RFC:

  -- The URI reference is parsed into the five URI components
  --
  (R.scheme, R.authority, R.path, R.query, R.fragment) = parse(R);

  -- A non-strict parser may ignore a scheme in the reference
  -- if it is identical to the base URI scheme.
  --
  if ((not strict) and (R.scheme == Base.scheme)) then
     undefine(R.scheme);
  endif;

  if defined(R.scheme) then
     T.scheme    = R.scheme;
     T.authority = R.authority;
     T.path      = remove_dot_segments(R.path);
     T.query     = R.query;
  else
     if defined(R.authority) then
        T.authority = R.authority;
        T.path      = remove_dot_segments(R.path);
        T.query     = R.query;
     else
        if (R.path == "") then
           T.path = Base.path;
           if defined(R.query) then
              T.query = R.query;
           else
              T.query = Base.query;
           endif;
        else
           if (R.path starts-with "/") then
              T.path = remove_dot_segments(R.path);
           else
              T.path = merge(Base.path, R.path);
              T.path = remove_dot_segments(T.path);
           endif;
           T.query = R.query;
        endif;
        T.authority = Base.authority;
     endif;
     T.scheme = Base.scheme;
  endif;

  T.fragment = R.fragment;

Ответ 3

Простой ответ: невозможно. Вы должны использовать абсолютный путь, если хост изменится.

Ответ 4

Просто вы можете написать атрибут href:

/:port/[path/]file.ext