クロスサイト JSON リクエストを処理するサーバーを作成しました。これは、ajax によって呼び出されることを意図した API です。動作しましたが、まだ奇妙な警告が表示されます。
一部の API 呼び出しは POSTS であるため、この警告をトリガーするプリフライト OPTIONS リクエストがあります (薄い出力):
127.0.0.1 - - [15/Aug/2013 22:24:20] "OPTIONS /login HTTP/1.1" 200 - 0.0080
W, [2013-08-15T22:24:20.124254 #3236] WARN -- : attack prevented by Rack::Prote
ction::HttpOrigin
これを引き起こすリクエストのプリフライト ヘッダーは次のとおりです。
OPTIONS /login HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:4567
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Access-Control-Request-Headers: origin, content-type
Accept: */*
Referer: http://localhost:4567/index.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
さらに、この警告が表示される理由を知りたいです。
SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
This poses a security threat. It is strongly recommended that you
provide a secret to prevent exploits that may be possible from crafted
cookies. This will not be supported in future versions of Rack, and
future versions will even invalidate your existing user cookies.
CORS xhr を許可する必要があるヘッダーを含むサーバー コードを次に示します。
enable :sessions
before do
headers['Access-Control-Allow-Origin'] = 'http://localhost:4567'
headers['Access-Control-Allow-Headers'] = 'origin, content-type, accept'
headers['Access-Control-Allow-Credentials'] = 'true'
if request.request_method == 'OPTIONS'
headers["Access-Control-Allow-Methods"] = "POST, GET"
halt 200
end
end