8

是否可以将带有 302 状态代码的响应发送到这样的 url:

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

4

6 回答 6

6

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

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

于 2009-08-16T21:48:25.043 回答
4

按照 HTTP 规范,Location标头字段的值必须是绝对URI值。这是根据RFC 3986(他们只是将名称从absoluteURI更改为absolute-URI):

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

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

于 2009-08-16T11:24:17.133 回答
4

严格阅读RFC2616不允许 Location 标头值中的片段,因为它们不是绝对 URI 的一部分。然而,随着IETF 的 HTTP 重写草案 ,这个问题得到了解决

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

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

于 2009-08-19T08:57:25.537 回答
2

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

Header(
    "Location: http://en.wikipedia.org/wiki/HTTP#Status_codes",
    true,
    302
);
于 2009-08-16T11:04:31.690 回答
1

是的。浏览器不会将哈希发送到服务器,而不是相反。

于 2009-08-16T11:16:51.333 回答
1

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

是的,你可以,它现在甚至是官方标准化的。

于 2021-02-08T11:47:10.790 回答