OPTIONS ルートに CORS ヘッダーを追加しても、ブラウザが API にアクセスできないのはなぜですか? 質問する

OPTIONS ルートに CORS ヘッダーを追加しても、ブラウザが API にアクセスできないのはなぜですか? 質問する

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 が正常かどうかを確認する OPTIONS リクエストが実行されます。

私の主な質問は、なぜこれが私のケースでは起こらないのかということです。なぜ app.options ブロックが呼び出されないのですか? なぜメインの app.get ブロックでヘッダーを設定する必要があるのですか?

ベストアンサー1

最も簡単な方法はnode.jsパッケージを使うことだと分かりましたコア最も簡単な使用法は次のとおりです。

var cors = require('cors')

var app = express()
app.use(cors())

もちろん、ニーズに合わせて動作を構成する方法はたくさんあります。上記のリンク先のページには、いくつかの例が示されています。

おすすめ記事