Когда я открываю URL-адрес веб-сайта с использованием базовой аутентификации HTTP, который содержит имя пользователя и пароль, например:
https://foo:[email protected]/basic-auth/foo/bar
Проверка через консоль браузера показывает, что location.href
возвращает URL-адрес без учетных данных (т. е. https://httpbin.org/basic-auth/foo/bar
).
Однако document.URL
возвращает URL-адрес с учетными данными (https://foo:[email protected]/basic-auth/foo/bar
).
Я не нашел никаких упоминаний о намеренном различии между этими двумя средствами доступа. Это ошибка браузера, деталь реализации или стабильное стандартное поведение?
Хм, я проверил только Firefox и Edge и думаю, что эта часть поведения была одинаковой.
TLDR: В текущей спецификации HTML (сентябрь 2024 г.) location.href
должен вести себя так же, как document.URL
(см. это обсуждение с annevk, одним из инженеров веб-стандартов). Все части URL-адреса должны быть включены, и поэтому для браузеров является ошибкой реализации его редактирование по соображениям безопасности.
Что касается реализации, Chromium , Firefox и Safari (Webkit) явно удалили части учетных данных из location.href
перед их доступностью к интерфейсам JavaScript.
Я предполагаю, что ребята из браузера не пришли к единому мнению, поскольку разработчики Chromium спрашивали, какое поведение по умолчанию в других браузерах и Firefox, похоже, реализовал такую функцию уже давно (по крайней мере, до Mozilla 1.0).
Для document.URL
кажется правильным вернуть полный URL-адрес с учетными данными в соответствии со спецификацией (не явно), и, по крайней мере, Chromium и Firefox следовали этому (я не тестировал в Safari).
С точки зрения спецификации эти два свойства «определены как идентичные» и location.href
не должны «опускать части URL-адреса» . Однако такое поведение редактирования учетных данных на уровне API еще не стандартизировано, но «определенно должно быть как-то стандартизировано».
Вероятно, актуально: stackoverflow.com/a/57193064/2181514: Chrome перестал поддерживать передачу учетных данных в URL-адресе после версии 52.