协议重定向错误地将React JS应用程序路由到IE9的默认页面
Protocol redirect incorrectly routing React JS app to default page in IE9
我一直在用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>
问题解决了
- 用嵌套函数和默认函数定义函数
- Angular JS IE9 Hashbang url rewriting
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- 如何使用铁流星与流星的默认路线
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- CKeditor:更改对话框中的默认选择选项
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何从外部页面激活非默认引导选项卡
- 防止默认锚点行为AngularJS
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- 在IE9中的输入字段中输入焦点最近按钮
- jpm的默认Firefox路径没有'不起作用
- jquerydatetimepicker日期和时间应在框默认值中,而无需单击框
- 如果值为空,如何设置输入的默认值?jQuery
- 为什么jQuery 1.8不能在IE8和InternetExplorer9中使用?(截至2012年9月的IE9最新版本)
- 无法删除 IE9 中的默认工具提示
- 将IE9 javascript设为默认主页
- 协议重定向错误地将React JS应用程序路由到IE9的默认页面
- AngularJS的默认选项select在IE9中不起作用
- JS+IE9(默认安全性):自动重定向到clickonce应用程序