NginxでCORSの設定を入れるときはOPTIONSの処理を忘れない
server { listen 80; ... add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD"; add_header Access-Control-Allow-Headers *; add_header Access-Control-Expose-Headers x-total-count; if ($request_method = "OPTIONS") { return 204; } ... }
OPTIONSにNGINXが返答しない場合、裏側のアプリケーションサーバーまで通信が行くが、そこで処理できない場合適当なエラーが帰る。
おまけ: Railsの場合
rack-corsがOPTIONSリクエストに対して200番を返してくれている。