javascript fetchを使う際の注意点 no-cors を使うとresponseは空になる

googleにGET requestをするとcross origin のエラーがでる

f:id:majitan:20220212192843p:plain

エラー内容

クロスオリジン要求をブロックしました: 同一生成元ポリシーにより、https://www.google.com/ にあるリモートリソースの読み込みは拒否されます (理由: CORS ヘッダー ‘Access-Control-Allow-Origin’ が足りない)。ステータスコード: 200

f:id:majitan:20220212192936p:plain

なので以下のようにcorsを無効にしました。

f:id:majitan:20220212193136p:plain

そしてもう1度実行すると。。。

f:id:majitan:20220212193506p:plain

エラーはでませんがresponse.okの値がfalseになりresponseの中身も空になっています。

 

しかしブラウザのネットワークを見てみるとgoogleからのページがきちんとかえってきているのが分かります。

f:id:majitan:20220212193755p:plain

今度はデフォルトのcorsが有効な状態で試してみます。

f:id:majitan:20220212195259p:plain

今度はstatus がtrueになりresponseもしっかり入っています。

成功したのは送ってきたサーバがheaderのaccess-control-allow-originを許可してくれているからです。

f:id:majitan:20220212195407p:plain

いろいろなサイトで試しましたがほとんどのサイトはcross orignを許可しておらず、

fetchは見ず知らずのurlにリクエストをするのはものすごい不向きなのが分かりました。