我有一些JavaScript,它们在同一域中的两个独立服务器之间共享请求。
.com是JavaScript中域的要求吗?
在这种情况下,两个服务器都位于.abc.tyy域中,而tyy通常是.com。
想知道我是否只能对域名使用.com?我收到一个权限被拒绝的错误,但是此代码在同一domain(.com)上的其他单独服务器上可以正常工作。
更新:
这正是我的使用方式:
123.abc.tyy具有加载我要访问的属性的脚本。
打开脚本标记时位于123.abc.tyy上的脚本将document.domain设置为'abc.tyy'。
当我从234.abc.tyy的123.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添加到受信任的站点,则一切正常-这是否跳过了相同的原始策略?
最佳答案
不,SOP不在乎域是什么,只在乎它表示相同的来源。 (可能是您在某个地方对.com域进行了硬编码吗?)
请注意,还有更多要考虑的领域。 Same Origin Policy还查看协议,端口和主机。所以aaa.abc.tyy
和bbb.abc.tyy
是不同的起源。
如果您控制着所涉及的服务器,则可以查看Cross-Origin Resource Sharing,但是不幸的是,CORS仅在现代浏览器中实现(并且在支持它的IE版本上,只有在明确使用它的情况下才支持)。
当然,另一个选择是JSON-P,它具有现在可以跨浏览器工作的优点。
要查看的另一件事是document.domain
,详细信息here和here。
编辑后更新:
打开脚本标记时位于123.abc.tyy上的脚本将document.domain设置为'abc.tyy'。
当我从234.abc.tyy的123.abc.tyy脚本中调用'getUser()'函数时,出现权限拒绝错误。
您还需要在document.domain
中将BeginLoadPatient.aspx
设置为“ abc.tyy”。
如果我将234.abc.tyy和123.abc.tyy添加到受信任的站点,则一切正常-这是否跳过了相同的原始策略?
我完全不会感到惊讶(尽管对我而言这是很狡猾的),但是对此没有第一手的知识。将很容易测试。