フロントエンジニアでもCORSエラーに関して最低限覚えておきたいこと
CORSエラーに関して最低限覚えておきたいこと
corsエラーは開発時によく発生しますが、恥ずかしながら「異なるオリジン間のapiリクエストで発生する」くらいにしか理解していませんでした。
フロントエンジニアだからといって曖昧な理解しかできていないのはまずいので、何が起きているかは理解しておかなくてはと思ったので忘却録として残します。
corsエラーが発生する時の状況
異なるオリジン間でリクエストを行うと、基本的にcorsエラーが発生します。
例)localhost:3333
→localhost:3000
のGETリクエスト
CORSエラーが発生しても、検証ツールのネットワークタブには、status:200 OK
と表示されるっぽいので紛らわしいですね。
CORS対応の処理がない場合のレスポンスヘッダーは以下です。
corsエラー対応された時の状況
api側でcorsの対応を行った後のレスポンスヘッダーは以下です。
Access-Control-Allow-~~~
のヘッダーが追加されています。
要は、これらがレスポンスヘッダーにないとCORSエラーが発生するということですね。
GETのapiは、Acces-Control-Allow-Origin
だけでcorsエラーが解消したのですが、POSTやPUTはAcces-Control-Allow-Method
やAcces-Control-Allow-Headers
の設定も必要でした。
(POSTやPUTはリクエストヘッダーにContent-Type:application/json
などの情報を追加する要素があるかららしいです)
corsエラー時のaxiosエラーオブジェクト
corsエラーが発生した時のaxiosのエラーオブジェクトは以下です。
レスポンスが正常に受け取れない為、error.response
は入っていなく、error.request.status
が0
になっています。
cors以外のエラーレスポンスの時は、error.request.status
にも正しいステータスコードが入ります。
Discussion