Rails 3 应用程序中的 Access-Control-Allow-Origin 不允许来源 http://localhost:3000

Posted

技术标签:

【中文标题】Rails 3 应用程序中的 Access-Control-Allow-Origin 不允许来源 http://localhost:3000【英文标题】:Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin in Rails 3 application 【发布时间】:2013-01-03 12:22:00 【问题描述】:

我无法通过以下错误从 XHR 获取 GET

XMLHttpRequest cannot load http://blog.rrikesh.com/demo/assets/img/img1.jpg. Origin       
http://localhost:3000 is not allowed by Access-Control-Allow-Origin.

所以,我允许像这样的跨域访问:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :allow_cross_domain_access
  def allow_cross_domain_access
      response.headers["Access-Control-Allow-Origin"] = "*"
      response.headers["Access-Control-Allow-Methods"] = "GET, PUT, POST, DELETE"
  end
end

但是,它发生了同样的错误。我能做什么?

【问题讨论】:

你考虑过 JSONP 吗? en.wikipedia.org/wiki/JSONP 你能显示你用来发出请求的 javascript 吗?可能是您的 JS 代码正在发送一些自定义标头。有时,以下内容会解决问题:response.headers["Access-Control-Allow-Headers"] = "Content-Type" 我正在使用这个 jQuery 库来访问 EXIF 数据。 nihilogic.dk/labs/exifjquery/jquery.exif.js 【参考方案1】:

以下 php 代码适用于我。 请注意,if (...) 非常重要,如果您为所有请求返回相同的 CORES 标头,那么(至少)chrome 将取消请求(至少对于 localhost 服务器)

<?php
if (isset($_SERVER['HTTP_ORIGIN'])) 
    //header("Access-Control-Allow-Origin: $_SERVER['HTTP_ORIGIN']");
    header("Access-Control-Allow-Origin: *");
    header('Access-Control-Allow-Credentials: true');    
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); 
   
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') 
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers: $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']");

    exit(0);
 

?>

【讨论】:

以上是关于Rails 3 应用程序中的 Access-Control-Allow-Origin 不允许来源 http://localhost:3000的主要内容,如果未能解决你的问题,请参考以下文章

rails 3中的api身份验证

Rails 3:如何正确显示“textarea”中的文本?

ActiveRecord / Rails 3 中的日期格式

Rails 3 应用程序中的 Sass 导入错误 - “找不到或无法读取要导入的文件:指南针”

best_in_place 不是 Rails 3.2.1 中的函数错误

连接到 gmail 时 Rails 3.1.0.rc5 中的 Net::SMTPAuthenticationError