【问题标题】:Same origin policy causes Ajax requests to example.com from www.example.com to be denied?同源策略导致从 www.example.com 到 example.com 的 Ajax 请求被拒绝?
【发布时间】:2012-10-21 02:19:37
【问题描述】:

如果您访问位于 http://www.example.com/dir 的网站,那么对 http://example.com/dir/something.php 的任何 ajax 请求(缺少 www)都会导致以下消息显示在 google chrome 的控制台中:

XMLHttpRequest cannot load http://example.com/dir/something.php.
Origin http://www.example.com is not allowed by Access-Control-Allow-Origin.

这是怎么回事,可以做些什么来解决这个问题?

编辑:当您访问 www.example.com 时,example.com 设置的所有 cookie 似乎也会消失?

【问题讨论】:

  • 政策坚持方案、主机名和端口号(如指定)完全相同
  • @Pointy 那么我该如何解决这个问题呢?
  • 您可以通过将所有页面放在同一个域中来修复它。
  • 它们指向同一个域,但是如果有人在 url 前面手动键入 www,则会导致 ajax 请求不起作用。有没有办法使用 .htaccess 将所有内容从 www 重定向到没有 www 的情况,这会解决这个问题吗?
  • 不,您不能在服务器端执行此操作,因为执行规则的是 浏览器。为什么您仍然允许将用户输入用作 XHR 上的 URL?我猜你可以使用 JavaScript 来确保任何此类 URL 都具有正确的域。

标签: javascript ajax security same-origin-policy


【解决方案1】:

子域被视为“不同域”,因此将被阻止。其中包括www,因为它被视为example.com 的子域

可以通过 iframe 通信解决此问题,因为 iframe 可以与主页内容进行通信,只要它们位于同一个顶级域中。

【讨论】:

  • 这里的子域是什么?它是同一个域,除了一个有 www 而一个没有。
  • @ClickUpvote www 被视为子域。这会导致错误。
  • 如果 IFrame 不是一个选项,那么在这种情况下有什么解决方案?我可以通过 .htaccess 进行重定向吗?
  • @JosephtheDreamer 如果页面尝试使用不同域的请求,浏览器将不允许它 - 您无法通过服务器端重定向解决该问题。
  • @Pointy 我想我误解了这一点。我想我的意思是重定向页面,以便目标域与页面的域匹配。所以访问www 版本将重定向到无www 版本,从那里,AJAX 将使用无www url。
【解决方案2】:

www.example.comexample.com 是不同的域,它们可以提供不同的内容。 www.stackoverflow.com 仅重定向到 stackoverflow.com,但从技术上讲,它可以显示一个充满小马的网站。

参见Origin determination rules - 它实际上使用完全相同的example.com (nomen est omen!) 作为示例。

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 2013-11-14
    • 2012-09-09
    • 1970-01-01
    • 2017-01-14
    • 2017-06-18
    • 2018-12-10
    • 2013-04-07
    • 2016-12-17
    相关资源
    最近更新 更多