3

我正在使用 Rails 3 开发 API-Server,到目前为止它非常方便,但我一直遇到错误,我不确定这是因为我的 Apache 设置还是 Rails 应用程序。

当我尝试通过 XHR 在http://sample.domain/uri/id上执行 HTTP DELETE 或 PUT 请求时,curl 或 HTTP-Client.app Rails 或 Apache 以 404 或 403 响应(取决于客户端。我认为是因为cors) 和 Safari 开发者控制台响应

XMLHttpRequest cannot load http://sample.domain/uri/id. Origin http://web.client/ is not allowed by Access-Control-Allow-Origin.

我在 Apache2 上使用 mod_rack aka mod_rails 并且我的虚拟主机实际上包含以下内容:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods POST,GET,DELETE,PUT,OPTIONS
Header set Access-Control-Allow-Headers X-Requested-With

Apache error_log 响应以下错误:

[Sat Oct 30 01:37:34 2010] [error] [client 22.222.222.22] client denied by server configuration: /path/to/rails/folder/public, referer: http://web.client/

Rails development.log 响应

Started OPTIONS "/uri/id" for 84.190.123.140 at 2010-10-30 03:18:42 +0200
ActionController::RoutingError (No route matches "/uri/id"):

在这里,我不确定为什么 OPTIONS 电话会出现低谷,因为我认为这只是预检,并且肯定没有 OPTIONS 路线,因为我想回复 DELETE

如果您对如何解决此问题有任何想法,请与我分享。

非常感谢大卫

4

3 回答 3

1

在 *nix 系统中,您首先需要在 apache 中包含/启用“Headers”模块

sudo a2enmod 标头

然后,您需要在您的虚拟主机中包含以下行:

标头集 Access-Control-Allow-Origin: "*"

于 2015-07-28T21:47:34.337 回答
0

这听起来像是一个不同的问题。

关于 CORS 的标头,您正在做正确的事情。您的 Apache 配置中的其他内容正在拒绝客户端。Apache 根本不关心同源策略,因此您的“客户端被服务器配置拒绝”错误将是由于不正确的Access指令或类似原因造成的。

如建议的那样,请确保您可以curl -X OPTIONS http://sample.domain/uri/id先。

于 2011-12-01T06:16:31.177 回答
0

您需要响应 OPTIONS 方法。它在实际的 DELETE 方法之前发送以确定是否允许发送 DELETE 命令 - 称为预检您可以使用Access-Control-Max-Age标头控制权限的有效期。

在您对 OPTIONS 的回复中,您发送 Access-Control-Allow-Origin 等。

想象一下,如果不是这样的话。删除对象后,您将发送 ACAO 。这可能会或可能不会被允许。

对于原始服务器,通常最好创建一个可以发布/删除的服务器的实际白名单,或者鹦鹉学舌回复请求服务器的域名。“*”本质上禁用了 CORS 并使用户面临各种攻击。

于 2012-11-11T06:05:15.210 回答