协议重定向错误地将React JS应用程序路由到IE9的默认页面

Protocol redirect incorrectly routing React JS app to default page in IE9

本文关键字:IE9 默认 路由 应用程序 错误 重定向 JS React 协议      更新时间:2023-09-26

我一直在用rackt/React -router开发一个React JS应用程序,最近的测试发现IE9有一个奇怪的行为。

背景:
我们将F5设置为执行协议重定向(302),以便如果有人试图导航到http://react.site.root/#/virtual.page,它将重定向到https://react.site.root/#/virtual.page。由于这是一个单页应用程序,重定向实际上发生在http://react.site.root/上。此重定向是Keep-Alive请求的结果。

问题:
在IE9中,当这个协议重定向发生时,用户最终会到达https://react.site.root/#/default.route,而不管他们试图访问的是哪个虚拟页面。这个问题在以后版本的IE, Chrome(桌面或Android), iPhone 5s或6(没有实际的设备来测试其他)中没有出现。有趣的是,在BrowserStack中使用任何iPhone版本时也会发生这种情况。

我的研究:
我也用stackoverflow和Google搜索,我发现的唯一半相关的问题是IE9缓存重定向,但据我所知,这只适用于301重定向,因为协议重定向路径不包括虚拟页面或任何路由数据在cookie似乎不适合。尽管如此,我还是找到了一个测试,需要删除浏览器历史记录并在InPrivate Browsing下运行一个选项卡,这表明这不是问题。我还记录了Fiddler的请求和重定向响应,适用于工作浏览器和IE9,没有发现任何可疑之处。

从某种意义上说,IE9似乎把重定向的页面当作一个新页面,也许原来的javascript上下文在重定向上被破坏了,这就解释了为什么react使用默认路由。不幸的是,我不知道如何验证这个理论,也不知道如何推进这个问题。如有任何帮助,不胜感激。

我找到了答案。简而言之,IE9和一些旧的浏览器忘记了原始请求URL的片段部分,只会使用重定向响应中的片段。由于浏览器在向服务器发出原始请求之前剥离了片段,因此它不能出现在重定向位置中。

查看更多信息:
URL片段和302重定向
http://blogs.msdn.com/b/ieinternals/archive/2011/05/17/url-fragments-and-redirects-anchor-hash-missing.aspx

把这个放在你的<head>的顶部:

<script>
   window.location.hash = window.location.hash
</script>

问题解决了