3

Rails 3 を使用した API サーバーに取り組んでいますが、これはこれまでのところ非常に便利ですが、常にエラーが発生しており、Apache セットアップまたは Rails アプリが原因であるかどうかはわかりません。

http://sample.domain/uri/idで XHR 経由で HTTP DELETE または PUT リクエストを実行しようとすると、curl または HTTP-Client.app Rails または Apache が 404 または 403 で応答します (クライアントによって異なります。 of 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 別名 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 呼び出しがなぜトラフになるのかわかりません。これはプリフライトにすぎないと思ったからです。DELETE に応答したいので、OPTIONS へのルートがないことは確かです。

この問題を解決する方法について何かアイデアがあれば、私と共有してください。

どうもありがとうデビッド

4

3 に答える 3

1

* nix システムでは、最初に apache に「ヘッダー」モジュールを含める/有効にする必要があります

sudo a2enmod ヘッダー

次に、仮想ホストに次の行を含める必要があります。

ヘッダー セット Access-Control-Allow-Origin: "*"

于 2015-07-28T21:47:34.337 に答える
0

OPTIONS メソッドに応答する必要があります。これは、DELETE コマンドの送信が許可されているかどうかを判断するために、実際の DELETE メソッドの前に送信されます (プリフライトと呼ばれます) 。Access-Control-Max-Ageヘッダーを使用して、アクセス許可の有効期間を制御できます。

OPTIONS への応答では、Access-Control-Allow-Origin などを送信します。

そうでない場合を想像してみてください。オブジェクトを削除した後で、ACAO を送信することになります。許可されている場合と許可されていない場合があります。

オリジンサーバーの場合、投稿/削除できるサーバーの実際のホワイトリストを作成するか、要求サーバーのドメイン名をオウム返しするのが最善の場合がよくあります。「*」は基本的に CORS を無効にし、ユーザーをあらゆる種類の攻撃にさらします。

于 2012-11-11T06:05:15.210 に答える
0

それは別の問題のように聞こえます。

CORSのヘッダーに関して正しいことをしています。Apache 構成の他の何かがクライアントを拒否しています。Apache は同一生成元ポリシーをまったく気にしないため、「サーバー構成によってクライアントが拒否されました」というエラーは、誤ったAccessディレクティブまたは同様のものが原因で発生します。

提案されているように、最初にできることを確認してくださいcurl -X OPTIONS http://sample.domain/uri/id

于 2011-12-01T06:16:31.177 に答える