Express.js Webフレームワークを使用するNode.jsアプリケーションでCORSをサポートしようとしています。Googleグループディスカッションを読みましたこれを処理し、どのようにCORS作品についていくつかの記事を読む方法についてを。最初に、これを行いました(コードはCoffeeScript構文で記述されています)。
app.options "*", (req, res) ->
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
# try: 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Methods', 'GET, OPTIONS'
# try: 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
# ...
動作していないようです。ブラウザ(Chrome)が最初のOPTIONSリクエストを送信していないようです。リソースのブロックを更新したばかりのときに、クロスオリジンGETリクエストを次の宛先に送信する必要があります。
app.get "/somethingelse", (req, res) ->
# ...
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
res.header 'Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
# ...
(Chromeで)動作します。これはSafariでも機能します。
私はそれを読んだ...
CORSを実装するブラウザーでは、各クロスオリジンGETまたはPOSTリクエストの前に、GETまたはPOSTがOKであるかどうかをチェックするOPTIONSリクエストがあります。
だから私の主な質問は、なぜこれが私の場合には起こらないように見えるのですか?app.optionsブロックが呼び出されないのはなぜですか?メインのapp.getブロックでヘッダーを設定する必要があるのはなぜですか?