Относительный путь, но для порта?
мы все знакомы с относительными путями: относительный путь к ./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
?
4 ответов
Это может быть достигнуто с помощью JavaScript, установив window.location.port
собственность.
<a href="#" onclick="javascript:window.location.port=8080">go</a>
вы не можете изменить любую часть авторитет (т. е. хост:порт часть) в относительных URL-адресов. См. алгоритм, описанный в 5.2.2 of 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's 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;