document.domain是相同的但仍然得到同源错误

时间:2016-06-18 09:02:07

标签: javascript cors cross-domain same-origin-policy

我有一些看起来像这样的JavaScript:

// https://secure.example.com
document.domain = "example.com";
window.myVar = "value";

// http://example.com
document.domain = "example.com";
var iframe = document.body.appendChild(document.createElement("iframe"));
iframe.onload = function () {
    console.log(iframe.contentWindow.myVar);
}
iframe.src = "https://secure.example.com";

我正试图通过将myVar加载到https://secure.example.com中的iframe来http://example.com。请注意httphttps的使用情况。如果这两个域都使用了httphttps,那么现在我希望有一个使用http而另一个使用https。我已逐步完成代码以验证document.domain是否设置正确。为什么会这样?

2 个答案:

答案 0 :(得分:2)

您的问题不是域名或托管服务商。你的问题是协议

您无法跨协议设置document.domain

由于协议的原因,

httphttps不是同一个来源,就像example.com:80因为端口而与example.com:8080的起源不同。

有很好的安全理由不允许混合http和https

请阅读https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

答案 1 :(得分:0)

基于MDN的页面How to fix a website with blocked mixed content

  

避免混合内容阻止的最佳策略是为所有人服务   内容为HTTPS而非HTTP。

     

对于您自己的域,将所有内容作为HTTPS提供并修复您的链接。   通常,内容的HTTPS版本已经存在,而这只是   需要添加" s"链接 - http://到https://。

     

对于其他域,请使用该网站的HTTPS版本(如果有)。如果是HTTPS   如果没有,您可以尝试联系域名并询问是否   他们可以通过HTTPS提供内容。