【问题标题】:How does the browser / JavaScript same origin policy apply to two-level domain names?浏览器/JavaScript同源策略如何适用于二级域名?
【发布时间】:2011-04-12 16:56:21
【问题描述】:

我有一些 JavaScript 在同一域上的两个不同服务器之间共享请求。

.com 是 JavaScript 中域的要求吗?

在这种情况下,两个服务器都在 .abc.tyy 域上,tyy 通常是 .com

想知道我是否只能将 .com 用于域?我收到权限被拒绝错误,但此代码在同一域 (.com) 上的其他单独服务器上运行良好。

更新: 这正是我使用它的方式:

123.abc.tyy 有一个脚本可以加载我想要访问的属性。

123.abc.tyy 上的脚本在打开脚本标记处将 document.domain 设置为 'abc.tyy'。

当我在 123.abc.tyy 的脚本 FROM 234.abc.tyy 中调用“getUser()”函数时,出现权限被拒绝错误。

我调用“getUser()”的方式是: 我在浏览器中访问http://123.abc.tyy,该站点允许我指定要在其中一个框架中加载的 URL。我在该页面中将该 URL 指向 http://234.abc.tyy/BeginLoadPatient.aspx" 我正在执行以下操作:

window.location = 'http://234.abc.tyy/LoadPatient.aspx?PatientId=' + getUser() '; getUser 是源自 123.abc.tyy 的函数

如果我将 234.abc.tyy 和 123.abc.tyy 添加到我的受信任站点,一切正常 - 这是否跳过了同源策略?

【问题讨论】:

    标签: javascript same-origin-policy


    【解决方案1】:

    不,SOP 不关心域是什么,只关心它代表相同的来源。 (会不会是您在某处硬编码了 .com 域?)

    请注意,要考虑的不仅仅是域。 Same Origin Policy 还查看协议、端口和主机。所以aaa.abc.tyybbb.abc.tyy不同的来源。

    如果您控制所涉及的服务器,您可能会查看Cross-Origin Resource Sharing,但不幸的是,CORS 仅在现代浏览器中实现(并且在那些支持它的 IE 版本上,只有当您明确使用它时才支持它)。

    当然,另一个选择是JSON-P,它的优势在于现在可以跨浏览器工作。

    另一件事是document.domain,详细信息herehere


    修改后

    更新

    123.abc.tyy 上的脚本在打开脚本标记处将 document.domain 设置为 'abc.tyy'。

    当我在 123.abc.tyy 的脚本 FROM 234.abc.tyy 中调用“getUser()”函数时,出现权限被拒绝错误。

    您还需要在BeginLoadPatient.aspx 中将document.domain 设置为“abc.tyy”。

    如果我将 234.abc.tyy 和 123.abc.tyy 添加到我的受信任站点,一切正常 - 这是跳过同源策略吗?

    我一点也不感到惊讶(尽管对我来说这很狡猾),但我没有第一手资料。很容易测试。

    【讨论】:

    • 您好,感谢您提供的好信息。我有其他具有不同主机名的部署似乎工作正常 - 也许是浏览器中的权限?当我查看您分享的所有内容时,我会跟进另一条评论。谢谢。
    • @user53885:还有document.domain,可能值得研究——我在上面添加了链接。
    • 添加了我的场景的更多细节。
    猜你喜欢
    • 2011-06-06
    • 2012-08-04
    • 2013-05-18
    • 2011-02-02
    • 2011-05-04
    • 2014-05-29
    • 1970-01-01
    • 2012-12-19
    相关资源
    最近更新 更多