URL片段和302重定向
-
21-09-2019 - |
题
这是众所周知,网址片段(之后的部分 #
)是不送到服务器。
我不知道但如何碎片工作时的一个服务器redirect(通过HTTP地位和302 Location:
头)。
我的问题是真的有两个:
如果原来的网址有一个片段(
/original.php#foo
),并且一向是为了/new.php
, 不该段的一部分,原来的网址简单地获得失去了什么?或者它不会有时获得应用于新的网址?
会的新网址曾经/new.php#foo
在这种情况下?不论原来的网址,如果服务器重定向到新网址的一个片段(
/new.php#foo
),将片段获得的"荣誉"?或服务器真的没有商业干扰的片段,在所有--并且将浏览器,因此忽略它只需要/new.php
??
解决方案
更新的2014-Jun-27:
RFC7231,超文本传输协议(HTTP/1.1):语义和内容, 已出版作为一个提议的标准。从 志:
语法中的位置头域已经改变,以允许所有 URI参考文献,包括相对的参考文献和碎片,沿 与一些澄清时使用的碎片不会 适当的。(第7.1.2)
重要的一点 第7.1.2.位置:
如果位置价值提供一个3xx(向)响应不 没有一个片段组件,用户的代理人必须处理的 重定向,如果价值继承的片段组成部分URI 参考用于生成请求目标(即,重定向 继承原始参考的片段,如果有的话)。
例如,一个 获取请求所产生的URI参考 "http://www.example.org/~蒂姆"可能会导致303(参见其他) 反应包含的标题领域:
Location: /People.html#tim
这表明用户代理的重定向 "http://www.example.org/People.html#tim"
同样地,一个得到请求所产生的URI参考 "http://www.example.org/index.html#larry"可能会导致301(移动 永久性的)应包含该标题领域:
Location: http://www.example.net/index.html
这表明用户代理的重定向 "http://www.example.net/index.html#larry"保留原来的 片段标识符。
这应该清楚地回答你的问题。
更新结束
这是一个开放的(不指定的)问题 目前HTTP规范.它是解决问题2的 IETF httpbis工作组:
#6允许的碎片在 Location
头。#43这样说:
我只是测试这与各种浏览器。
- Firefox和野生动物使用的片段中的位置头。
- 歌剧院采用的片段从源URI,当本,否则片段的重新定向的位置
- IE(8)忽略了该段中的位置URI,因此将使用的片段从源URI,当本
建议:
"注:该行为时段标识符,从原来的URI和重新定向需要合并的不确定;目前的用户代理的确不同于什么片段优先。"
[...]
它的出现,IE8 做 使用的片段idenfitier从
Location
(的的行为,我看见可能限于"localhost").因此,我们似乎一致的行为Safari/IE/Firefox/铬(只是测试),在这碎片从位置头被使用,不管是什么原URI。
因此,我改变我的建议的文件 那 如预期的行为。
这导致最浏览器兼容和未来证明(因为这个问题最终将获得标准化)回答你的问题:
A: 碎片从原来的网址获得放弃。
B: 碎片从 Location
标题是荣幸。
其他提示
Safari5和IE9和下降的原URI的片段,如果一个HTTP/3xx重新定向的发生。如果位置头上的响应,指定一片段,它是使用。
10+、铬11+,Firefox4+,歌剧院将所有"重新"的原URI的片段之后的下一个3xx重新定向。
测试页: http://www.webdbg.com/test/redir/fragment/.
看到的进一步讨论这个问题 http://blogs.msdn.com/b/ieinternals/archive/2011/05/17/url-fragments-and-redirects-anchor-hash-missing.aspx
只是让你知道,你可以在这里找到适当的规格。通过w3c的定义如何都应该表现: http://www.w3.org/TR/cuap#uri 条款4.1-看到如下:
当资源(URI1)已经移动,HTTP重定向能够表明它的 新的位置(URI2).
如果URI1有一个片段标识#frag,那么新的目标, 用户代理应试图达到将被URI2#frag.如果URI2 已经有一个片段标识,然后#frag不能附和 新的目标是URI2.
错误的:大多数当前用户的代理执行HTTP重但不要 追加的片段标识到新URI,其一般 混淆用户,因为他们最终有错误的资源。
参考文献:
HTTP重描述在第10.3HTTP/1.1 说明[RFC2616].所需要的行为是详细描述 在"处理段标识符,在重新定向的网址"[RURL].的 术语"持续的均匀资源定位器(反)"指定的一个网址(a 特殊情况下URI)点到另一个通过HTTP 重定向。更多信息,请参考"持续的均匀资源 定位器"[反].例如:
假设一户请求的资源 http://www.w3.org/TR/WD-ruby/#changes 和服务器重定向 用户代理 http://www.w3.org/TR/ruby/.之前获取,后者 URI,浏览器应该追加的片段标识#改变它: http://www.w3.org/TR/ruby/#changes.