我可以使用锚点将HTTP重定向发送到网址吗?

时间:2009-08-16 10:57:51

标签: http http-status-code-302

是否可以将包含302状态代码的响应发送到这样的网址:

http://mysite.com/something/#somethingelse

6 个答案:

答案 0 :(得分:5)

遵循HTTP规范,Location header field的值必须是 absoluteURI 值。这是根据RFC 3986(他们只是将名称从 absoluteURI 更改为 absolute-URI ):

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

因此理论上,片段不允许作为值的一部分。但是浏览器可以处理它。

答案 1 :(得分:5)

是的,您可以使用片段标识符。这是HTTP规范中的一个已知错误。

请参阅http://trac.tools.ietf.org/wg/httpbis/trac/ticket/6

答案 2 :(得分:3)

严格阅读RFC2616不允许位置标头值中的片段,因为它们不是绝对URI的一部分。但是,使用IETF's HTTP rewrite draft this was fixed

最近Julian比较了浏览器如何处理位置标头中的URI片段(这是HTML锚标记处理的内容):http://www.greenbytes.de/tech/tc2231/redirects.html

所以答案是:是的,您可以将片段放在Location头URI中。

答案 3 :(得分:2)

从PHP中这样做似乎没有问题:

Header(
    "Location: http://en.wikipedia.org/wiki/HTTP#Status_codes",
    true,
    302
);

答案 4 :(得分:1)

是。它是不向服务器发送哈希的浏览器,而不是相反。

答案 5 :(得分:1)

虽然原始 RFC 2616 只允许 absoluteURI 标头中的 Location,但正如其他(较旧的)答案所解释的,当前的 RFC 7231 允许任何 URI-reference ,要么是完整的 URI(可能包含片段),要么是相对 URI,根据当前的有效 URI 进行解析。并且它甚至明确地描述了片段在重定向期间的行为(如果 Location 标头包含片段,则使用它,如果没有,则在重定向后继承并应用原始片段)。

是的,你可以,它现在甚至已经正式标准化了。