2013-11-21 28 views
2

我正在發送從Sencha到Rails的POST請求。當我使用RestClient Application測試它時,它會給出「200 OK」。但是,當我從煎茶應用程序發送請求,這將返回如下錯誤:CORS POST請求不起作用。請求的資源上沒有「Access-Control-Allow-Origin」標題。哪裏不對?

XMLHttpRequest cannot load http://appointmedoc.herokuapp.com/login.json?_dc=1385013964033. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost' is therefore not allowed access. 

雖然在我的Rails代碼application.rb中

after_filter :cors_set_access_control_headers 


def cors_set_access_control_headers 
    headers['Access-Control-Allow-Origin']  = '*' 
    headers['Access-Control-Allow-Methods']  = 'POST, GET, OPTIONS' 
    headers['Access-Control-Max-Age']   = '1728000' 
    headers['Access-Control-Allow-Credentials'] = 'true' 
    end 

現在做什麼人?

回答

4

幫你一個忙,在機架級而不是在控制器級處理CORS。我推薦機架 - https://github.com/cyu/rack-cors。不應超過10分鐘設置。

before_filter可能會停止執行該操作,在這種情況下,我不確定after_filter是否會運行。

+1

如果我想這樣做,沒有架子-CORS是什麼?事實上,我已經看到應用程序使用這個工作正常。 –

+1

我相信你有。但在我看來這是一個壞主意。這很複雜,大多數實現者都很難理解,並導致像你遇到的問題。老實說,我不知道爲什麼有人會覺得有必要在控制器層面上做CORS - 這顯然是Rack中間件所關注的一個問題。而使用正確的中間件需要10分鐘的時間 - 幾乎可以肯定比你在這個問題上花費的時間少得多。 –

-2

我敢打賭,你已經安裝了https-everywhere。要麼在heroku的任何地方禁用https(轉到該網址,然後點擊地址欄中的圖標),或直接加載https網址。

0

處理它放在機架級:

安裝:

https://github.com/cyu/rack-cors

# application.rb 

# This allows requests from all origins, with all methods. 
config.middleware.use Rack::Cors do 
    allow do 
    origins '*' 
    resource '*', headers: :any, methods: [:get, :post, :put, :patch, :delete, :options] 
    end 
end