Ответ 1
Обновление 2014-Jun-27:
RFC 7231, протокол передачи гипертекста (HTTP/1.1): семантика и контент, опубликован как ПРЕДЛАГАЕМЫЙ СТАНДАРТ. Из Список изменений:
Синтаксис поля заголовка Location был изменен, чтобы все Ссылки на URI, включая относительные ссылки и фрагменты, вдоль с некоторыми разъяснениями относительно того, когда использование фрагментов не будет подходящее. (Раздел 7.1.2)
Важные моменты из Раздел 7.1.2. Расположение:
Если значение местоположения, указанное в ответе 3xx (перенаправление), не иметь компонента фрагмента, пользовательский агент ДОЛЖЕН обрабатывать перенаправление, как будто значение наследует компонент фрагмента URI ссылка, используемая для создания целевой цели (то есть перенаправления наследует исходный ссылочный фрагмент, если он есть).
Например, Запрос GET, сгенерированный для ссылки URI " http://www.example.org/~tim" может привести к 303 (см. другие) ответ, содержащий поле заголовка:
Location: /People.html#tim
который предполагает, что пользовательский агент перенаправляется на " http://www.example.org/People.html#tim"
Аналогично, запрос GET, сгенерированный для ссылки URI " http://www.example.org/index.html#larry" может привести к 301 (перемещен Постоянно), содержащий поле заголовка:
Location: http://www.example.net/index.html
который предполагает, что пользовательский агент перенаправляется на " http://www.example.net/index.html#larry", сохраняя оригинал идентификатор фрагмента.
Это должно четко ответить на ваши вопросы.
Обновить END
это открытая (не указанная) проблема с текущей спецификацией HTTP. он адресован в 2 выпусках рабочей группы IETF httpbis:
- # 6: Разрешены фрагменты в местоположении
- # 43: комбинация фрагментов/приоритет во время перенаправления
# 6 позволяет фрагменты в заголовке Location
. # 43 говорит следующее:
Я просто тестировал это с помощью различных браузеров.
- Firefox и Safari используют фрагмент в заголовке местоположения.
- Opera использует фрагмент из исходного URI, если присутствует, иначе фрагмент из адреса перенаправления
- IE (8) игнорирует фрагмент в URI местоположения, поэтому будет использовать фрагмент из исходного URI, если присутствует
Предложение:
"Примечание: поведение, когда идентификаторы фрагментов из исходного URI и перенаправления необходимо объединить, undefined, текущие пользовательские агенты действительно отличаются от того, какой фрагмент имеет приоритет."
[...]
Похоже, что IE8 использует идентификатор idenfitier от
Location
(поведение, которое я видел, может быть ограничено локальным хостом).Таким образом, мы, похоже, придерживаемся последовательного поведения для Safari/IE/Firefox/Chrome (только что протестировано), поскольку используется фрагмент из заголовка Location, независимо от того, что изначально был URI.
Поэтому я изменяю свое предложение, чтобы записать это как ожидаемое поведение.
это приводит к наиболее совместимому с браузером и будущему доказательству (потому что эта проблема в конечном итоге будет стандартизирована) ответит на ваш вопрос:
A: фрагменты из исходных URL-адресов отбрасываются.
B: фрагменты из заголовка Location
отмечены.