Redirect URL片段和302重定向
众所周知,URL片段(在Redirect URL片段和302重定向,redirect,fragment-identifier,http-redirect,Redirect,Fragment Identifier,Http Redirect,众所周知,URL片段(在#之后的部分)不会发送到服务器 我确实想知道,当涉及服务器重定向(通过HTTP状态302和位置:头)时,片段是如何工作的 我的问题有两个方面: 如果原始URL有一个片段(/original.php#foo),并且重定向到/new.php,那么原始URL的片段部分会丢失吗?或者它有时会应用到新的URL在这种情况下,新的URL是否会是/new.php#foo 不管原始URL是什么,如果服务器重定向到一个带有片段的新URL(/new.php#foo),该片段会得到“尊重”吗?或
#
之后的部分)不会发送到服务器
我确实想知道,当涉及服务器重定向(通过HTTP状态302和位置:
头)时,片段是如何工作的
我的问题有两个方面:
/original.php#foo
),并且重定向到/new.php
,那么原始URL的片段部分会丢失吗?或者它有时会应用到新的URL在这种情况下,新的URL是否会是
/new.php#foo
/new.php#foo
),该片段会得到“尊重”吗?或者服务器真的不需要干涉片段吗?浏览器会因此忽略它,只需转到/new.php
更新2014-6-27: ,已作为建议标准发布。从: 位置标头字段的语法已更改为允许所有 URI引用,包括相对引用和片段,以及 并澄清何时不允许使用碎片 适当的(第7.1.2节) 要点来自: 如果3xx(重定向)响应中提供的位置值 如果没有片段组件,则用户代理必须处理 重定向,就像值继承URI的片段组件一样 用于生成请求目标(即重定向)的引用 继承原始引用的片段(如果有) 例如,一个 获取为URI引用生成的请求 “”可能会导致303(请参阅其他) 包含标题字段的响应:
Location: /People.html#tim
Location: http://www.example.net/index.html
这表明用户代理重定向到
“”
同样,为URI引用生成GET请求
“”可能会导致301(已移动)
(永久)包含标题字段的响应:
Location: /People.html#tim
Location: http://www.example.net/index.html
这表明用户代理重定向到
,保留原作
片段标识符
这应该清楚地回答你的问题
更新结束
这是与的开放(未指定)问题。该问题在以下两个问题中解决:
位置
标题中使用片段#43说:
我刚刚用各种浏览器测试了这个
- Firefox和Safari使用位置标题中的片段
- Opera使用源URI中的片段(如果存在),否则使用重定向位置中的片段
- IE(8)忽略位置URI中的片段,因此将使用源URI中的片段(如果存在)
位置
中的片段idenfitier(我看到的行为可能仅限于localhost)
因此,我们似乎对Safari/IE/Firefox/Chrome(刚刚测试过)具有一致的行为,即使用位置头中的片段,而不管原始URI是什么
因此,我改变我的提议,将其记录为预期行为
这将为您的问题提供最具浏览器兼容性和未来证明(因为此问题最终将得到标准化)的答案:
A:原始URL的片段将被丢弃
B:来自
位置标题的片段将受到尊重。如果发生HTTP/3xx重定向,Safari 5和IE9及以下版本将删除原始URI的片段。如果响应上的Location标头指定了一个片段,则将使用该片段
IE10+、Chrome11+、Firefox4+和Opera都将在3xx重定向后“重新附加”原始URI的片段
测试页:
请参阅上关于这个问题的进一步讨论,让您知道,在这里,您可以通过w3c定义所有人的行为方式来找到合适的规范:-第4.1条-见下文:
当资源(URI1)移动时,HTTP重定向可以指示其位置
新位置(URI2)
如果URI1有一个片段标识符#frag,那么
用户代理应该试图联系的是URI2#frag。如果URI2
已具有片段标识符,则不能追加#frag,并且
新的目标是URI2
错误:大多数当前用户代理都实现HTTP重定向,但不实现
将片段标识符附加到新的URI,通常
混淆用户,因为他们最终使用了错误的资源
参考资料:
HTTP重定向在HTTP/1.1的第10.3节中进行了描述
规范[RFC2616]。详细描述了所需的行为
在“重定向URL中片段标识符的处理”[RURL]中。这个
术语“持久统一资源定位器(PURL)”指定URL(一个
URI的特例)通过HTTP指向另一个URI
重新使用有关更多信息,请参阅“持久统一资源”
定位器“[PURL]。例如:
假设一个用户请求位于的资源
并且服务器重定向
用户代理到。在拿到后者之前
URI时,浏览器应附加片段标识符#更改:
我面临着类似的问题
希望它能帮助那些有类似要求的人,在IE中为302重定向保存哈希
添加答案的重要部分,而不仅仅是链接
我们在应用程序中使用SiteMinder
身份验证
我发现在成功的身份验证之后,SiteMinder
正在使用302重定向到用户请求的应用程序页面<