将站点转移到 SSL 后,跨域请求被 Ajax 阻止

Posted

技术标签:

【中文标题】将站点转移到 SSL 后,跨域请求被 Ajax 阻止【英文标题】:Cross-Origin Request Blocked with Ajax after taking site to SSL 【发布时间】:2015-01-26 02:50:29 【问题描述】:

我们使用 Ruby 2.1.2 和 Rails 3.2.14。 将网站移至 SSL 后,我们在浏览器控制台上收到以下错误,用于 ajax 请求。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://sitename.com/xxx/xx?id=xx. This can be fixed by moving the resource to the same domain or enabling CORS.

我们已经尝试添加

headers:  'Access-Control-Allow-Origin': '*' ,
crossDomain: true

但没有效果。这是ajax代码:

$.ajax(
            type: "GET",
            data: id: id, 
            url: path+id,
            headers:  'Access-Control-Allow-Origin': '*' ,
            crossDomain: true,           
            success: function(data)  
);

还有其他建议吗??

【问题讨论】:

【参考方案1】:

您必须在服务器端设置标头。不在客户端。最简单的方法是在你的 ApplicationController 中使用这样的东西:

after_filter  :set_access_control_headers

def set_access_control_headers
  headers['Access-Control-Allow-Origin'] = '*'
end   

【讨论】:

【参考方案2】:

亚历山大的回答是正确的。但是,不建议允许所有域访问您的 api(除非它是公共的)See CORS section of OWASP Cheatsheet

Rails 5 实现

after_action :set_access_control_headers

def set_access_control_headers
  headers['Access-Control-Allow-Origin'] = 'mysite.example.com'
end

【讨论】:

以上是关于将站点转移到 SSL 后,跨域请求被 Ajax 阻止的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 请求跨域请求被阻止错误

ajax跨域请求无法携带cookie的问题

Laravel 5.2 无法将跨域 jQuery 方法识别为 AJAX

如何解决ajax跨域问题

AJAX 跨域请求 - JSONP获取JSON数据

AJAX 跨域请求 - JSONP获取JSON数据