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 应用程序中的 Sass 导入错误 - “找不到或无法读取要导入的文件:指南针”