браузеры автоматически удаляют # в URL? - PullRequest
3 голосов
/ 22 февраля 2012

нашему интерфейсу нужно сформировать URL, содержащий хэш (т. Е. http://blah/#some-link.), когда мы нажимаем на это в браузере и проверяем http-трафик с помощью fiddler, мы увидели, что все после бла / удаляется, таким образом, запрос на самом деле просто http://blah/., мы также подтвердили это в журнале отладки нашего сервера.

запрос перенаправляется на правильную страницу входа в систему безопасности Spring (потому что пользователь не вошел в систему), но теперь URL-адрес в браузере показывает: http://blah/some-link (хеш удален), но URL в браузере должен быть действительно http://blah/log-in.

есть идеи, почему это так? любое исправление или обходной путь? заранее спасибо.

Ответы [ 5 ]

5 голосов
/ 22 февраля 2012

Часть URI после # называется fragment:

URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

Схема и ее часть определяют местоположение документа, а фрагмент помогает браузеру идентифицироватьрасположение внутри этого документа.

Фрагмент отбирается из URI клиентским программным обеспечением перед его отправкой как часть запроса.

От RFC3986 :

идентификатор фрагмента не используется в специфичной для схемы
обработке URI;вместо этого идентификатор фрагмента отделяется
от остальной части URI до разыменования, и, таким образом, идентификационная информация
в самом фрагменте разыменовывается
исключительно агентом пользователя, независимо от схемы URI.Хотя
эта отдельная обработка часто воспринимается как потеря
информации, особенно для точного перенаправления ссылок, когда
ресурсы перемещаются во времени, она также служит для предотвращения того, чтобы поставщики
информации отказывали авторам ссылок вправо ссылаться на
информацию в ресурсе выборочно.

3 голосов
/ 22 февраля 2012

Содержимое после # используется только на стороне клиента, согласно спецификации HTTP.Если вам требуется эта информация на сервере, вы можете использовать другой разделитель или отправить его через ajax после загрузки страницы, прочитав ее на клиенте с помощью javascript.

0 голосов
/ 22 февраля 2019

Вы можете сделать это с помощью JavaScript

 <script>
 if(window.location.hash) {
    console.log(window.location.hash); 
    window.location.hash = window.location.hash;
 } 
</script>
0 голосов
/ 25 июля 2017

Hashmark удаляется из URL при нажатии кнопки «Назад» в IE9, IE10 или IE11

В IE10 при первом нажатии на ссылку HREF отображается правильный URL-адрес ниже: http://www.example.com/yy/zz/ff/paul.html#20007_14

Если нажать кнопку «Назад» еще раз, то появится ссылка ниже: http://www.example.com/yy/zz/ff/paul.html

Решение:

Пожалуйста, измените URL с помощью https

У меня работает

0 голосов
/ 22 февраля 2012

Часть URI, включая хэш (#) и после него, никогда не отправляется на сервер как часть HTTP-запроса.

Причина заключается в том, что идентификатор хеша изначально был разработан для указания на ссылки внутриданная веб-страница, а не новые ресурсы на сервере.

Если вы хотите получить хеш-идентификатор, вам придется использовать некоторый клиентский JavaScript, чтобы получить значение и отправить его с формой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...