浏览器/ JavaScript同源策略如何应用于两级域名?

时间:2010-09-15 13:45:25

标签: javascript same-origin-policy

我有一些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添加到我信任的网站,一切正常 - 这是否会跳过相同的原始政策?

2 个答案:

答案 0 :(得分:2)

不,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()'函数时,我收到了一个权限被拒绝的错误。

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

  

如果我将234.abc.tyy和123.abc.tyy添加到我信任的网站,一切正常 - 这是否会跳过相同的原始政策?

我不会感到惊讶(虽然对我来说这将是非常狡猾的),但没有它的第一手知识。很容易测试。

答案 1 :(得分:1)

我不完全理解问题的范围,但这可能对您有用。

JavaScript Same Origin Policy - How does it apply to different subdomains?