【问题标题】:document.domain is the same yet still getting same-origin errorsdocument.domain 相同但仍然出现同源错误
【发布时间】:2025-12-01 00:30:01
【问题描述】:

我有一些看起来像这样的 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";

我正在尝试通过将https://secure.example.com 加载到http://example.com 中的iframe 中来访问myVar。注意httphttps 的用法。当两个域都使用httphttps 时,这行得通,但现在我想让一个使用http,另一个使用https。我已经通过代码来验证document.domain 是否设置正确。为什么会这样?

【问题讨论】:

  • http 和 https 的来源不同,就像 example.com:80 与 example.com:8080 的来源不同一样。有很好的理由不允许混合 http 和 https
  • 显然是这样,但我找不到任何关于设置document.domain如何影响或不影响协议检查的信息。
  • 这无关你不能跨协议使用 document.domain - developer.mozilla.org/en-US/docs/Web/Security/…
  • "但我找不到任何有关设置 document.domain 如何影响或不影响协议检查的信息" - developer.mozilla.org/en-US/docs/Web/API/Document/domain: "Gets/sets 当前文档来源的域部分
  • 在同源策略的文档中,它们指的是主机/端口/协议。它从不等同于域和主机。我想这就是混乱的根源。

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


【解决方案1】:

您的问题不是域或主机。你的问题是协议

您不能跨协议设置document.domain

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

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

【讨论】:

    【解决方案2】:

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

    避免混合内容屏蔽的最佳策略是为所有 内容为 HTTPS 而不是 HTTP。

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

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

    【讨论】:

      最近更新 更多