1

Rails サーバーから RESTful サービスを作成しようとしています。私はオンラインでチュートリアルを見てきましたが、どうやら私は何か間違ったことをしているようです。私のエラーはCORSの問題です。ユーザーモデルとコントローラーがあります。ユーザーコントローラーで、ヘッダーを変更して、どのサイトでもサーバーから情報を取得できるようにしようとしています。

class UsersController < ApplicationController
  def options
    if access_allowed?
      set_access_control_headers
      head :ok
    else
      head :forbidden
    end
  end

  private
    def set_access_control_headers
      # headers['Access-Control-Allow-Origin'] = request.env['HTTP_ORIGIN']
      headers['Access-Control-Allow-Origin'] = '*'
      headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
      headers['Access-Control-Max-Age'] = '1000'
      headers['Access-Control-Allow-Headers'] = '*,x-requested-with'
    end


    def access_allowed?
      allowed_sites = '*' #you might query the DB or something, this is just an example
      return allowed_sites.include?(request.env['HTTP_ORIGIN'])
      return true
    end
end

また、ルートを設定して、サーバーがヒットしたときに「オプション」アクションに移動するようにしました。

  resources :users, :only => [:create]
  match '/users', :controller => 'users', :action => 'options', :via => :get

開発マシンで html ページを作成しましたが、Chrome から開いています (これが問題かどうかはわかりません)。ユーザーを取得しようとすると、

OPTIONS http://www.*****.com:3000/users 404 (Not Found) jquery.js:3
XMLHttpRequest cannot load http://www.****.com:3000/users. Origin file:// is not allowed by Access-Control-Allow-Origin.

誰かが私が間違っていることを教えてください。または、私を助けることができる方向に向けてください。

4

1 に答える 1

2

あなたのルートはリクエストを受け入れることを指定していますGET:via => :get)が、実際のリクエストはOPTIONSリクエストのようです。

次のように変更してみてくださいmatch:

match '/users', :controller => 'users', :action => 'options', :via => :options

また、アクションの名前は である必要はありませんoptions。好きな名前にすることができます。

参考までに、OPTIONSリクエストが返すものは次のとおりです。

指定された URL に対してサーバーがサポートする HTTP メソッドを返します。これは、特定のリソースの代わりに「*」を要求することで、Web サーバーの機能をチェックするために使用できます。

また、Rails でのオプション リクエストへの対応に関する記事はこちらです。

于 2013-01-25T03:50:30.127 に答える