【问题标题】:How do I avoid cross-origin issues when requesting data from a sub-domain?从子域请求数据时如何避免跨域问题?
【发布时间】:2015-02-15 02:55:12
【问题描述】:

在我的网站 www.example.com 上,我向子域提交了一个 ajax 请求:

function submit(json_data) {
  return $.ajax({
     type: 'POST',
     url: "https://sub-domain.example.com",
     data: json_data
  });
}

https://sub-domain.example.com 指向与 example.com 不同的 IP 地址(在 Amazon ec2 上)。这一切过去都很好。但是,当我仅将 example.com 更改为 HTTPS 时,我开始收到如下错误:

XMLHttpRequest 无法加载 https://sub-domain.example.com。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'https://www.example.com'。响应的 HTTP 状态代码为 522。

我使用 Cloudflare。修复此错误的简单方法是什么?

  • 我可以更改 Cloudflare 中的设置以确保没有问题吗?我想在 example.com/sub-domain 上设置一个指向与以前相同的 IP 地址的页面,但这似乎是不可能的。
  • 我可以对请求进行简单的更改吗?我尝试使用 jsonp,但这不适用于 POST。
  • 如果这不可能,我如何更改实际的子域以允许来自 example.com 的此类请求?

【问题讨论】:

  • 看来您必须在 Cloudflare 上设置 CORS 标头。 This blog post 可能会有所帮助

标签: jquery ruby-on-rails ajax cross-domain cloudflare


【解决方案1】:

您必须在您的子域上启用 cors 请求,并允许域 www.example.com 向您的子域发出请求。

Check this page或许能帮到你。

【讨论】:

    【解决方案2】:

    尝试添加

    config.action_dispatch.default_headers['Access-Control-Allow-Origin'] = '*'

    到 application.rb 并重新启动应用服务器。

    【讨论】:

    • 我可以将此添加到 example.com 吗?因为 sub-domain.example.com 不是 Rails 应用程序。
    • 把它放在发出请求的应用程序上。我相信它会将该标头附加到应用程序收到的所有响应中。
    • 您需要设置请求将要到达的域发送的Access-Control-Allow-Origin 标头,在您的情况下为sub-domain.example.com。这是为了防止人们从未经授权的域向您的服务器发出请求。
    猜你喜欢
    • 2021-09-11
    • 2023-04-04
    • 1970-01-01
    • 2010-10-13
    • 2015-08-09
    • 2014-08-04
    • 2023-03-12
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多