一个iframe随机失败到XHR
One iframe randomly fails to XHR
我在http://localhost:3000
上有一个页面,其中包含一个其src
为http://localhost:3010/login
的iframe。iframe执行以下操作:
- 请求
src
html - 在接收到302重定向之后,它跟随它到达
http://localhost:3000/oauth/authorize?response_type=code&client_id=1&redirect_uri=http%3A%2F%2Flocalhost%3A3011%2Fauthorization_code&state={state}
- 然后将iframe重定向回它自己的原点:
http://localhost:3010/authorization_code?code={code}&state={state}
- iframe嵌入式应用程序的服务器成功地交换了访问令牌的授权码,并使用设置为OAuth2
access_token
的cookie重定向到http://localhost:3010
- 一些JavaScript代码对
http://localhost:3010/api/customerInfo
进行XHR - 客户信息将返回并使用JavaScript在iframe中呈现
所以这一切都很好。
然而,当我添加第二个源代码为localhost:3020
的iframe嵌入式应用程序时,它经过相同的流程,其中一个应用程序的第一个XHR将失败,并出现以下错误:
XMLHttpRequest无法加载http://localhost:3000/oauth/authorize?response_type=code&redirect_uri=http%3A%2F%2localhost%3A3011%2Authorization_code&state=17nCw5o0Tr11Y6z8&client_id=1。请求的资源上不存在"Access Control Allow Origin"标头。原点'http://localhost:3010因此不允许访问。响应的HTTP状态代码为400。
这似乎有点奇怪,因为它说它无法通过XHR加载已经通过重定向加载的URL。
有时一个iframe失败,有时另一个ifame失败。每次,在每个浏览器中,一个iframe都可以执行XHR,另一个会导致此错误。我甚至将两个iframe的初始XHR延迟了不同的量,这样它们就不会重叠,但都无济于事。
iframe是动态生成的(通过React),具有以下属性:sandbox='allow-forms allow-scripts allow-same-origin'
。
这是由于cookie不是特定于端口的,不同于将端口号视为源的一部分的同源策略。在这种情况下,两个iframe都共享cookie,并且都使用access_token
作为包含OAuth访问令牌的cookie的名称。第二个完成授权过程的iframe将覆盖第一个iframe的access_token
cookie,导致来自后一个ifame的后续iframe调用失败。我通过使用唯一的cookie名称解决了这个问题。另一种修复方法是使用不同的主机名并编辑计算机的主机文件。
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- JsFiddle在分叉后描述失败
- 中止POST XHR可靠
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 当一些承诺失败时,如何继续使用$q.all()
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 在Jquery中单击传播失败
- 网页上失败的javascript会导致所有其他脚本失败
- Dojo XHR将200 OK视为错误
- zombie.js-xhr-json总是失败
- 一个iframe随机失败到XHR
- Windows 应用商店应用程序 xhr 到 localhost 失败
- 尽管Access Control Allow Origin标头存在问题,但跨域XHR失败
- 服务器返回重定向(302)后,iOS设备上的AJAX或XHR请求失败,代码为0
- XHR加载失败:POST
- 带有上载进度和重定向的XHR CORS请求失败
- HTML5上传通过XHR在Chrome浏览器失败
- XHR发布请求因CORS而失败
- Chrome扩展中的Cross Origin XHR失败
- XHR 加载失败:开机自检