質問: chrome extension 内で取得した文字列をローカルのファイルに書き込みがしたいです --- javascript のセキュリティ的に直接書き込む方法がなさそうなので ローカルにリクエスト内容をファイルに書き込みするだけでのウェブサーバーを立てて そこへ POST するようなコードを chrome extension 内で書いたんですが ``` has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. ``` というエラーになります CORS というものがあることは知ってたんですが 正確に仕様を把握できていなくて なんとなくアクセスしてるサーバー以外にリクエストを投げることを禁止しようとしてるエラーに見えるんですが、 `
回答: > > javascript 上の文字列をローカルホストに送信するにはどうすればいいのでしょうか > > > 質問文に書かれているコードであれば「送信」は行えているはずです。 従って期待通りサーバはリクエストを受け取っているはずです。 ブロックされているのは「JavaScriptでのレスポンス受信」です。 > > どういうケースだとブロックされるんでしょうか > > > * リクエストするがレスポンス受信をブロックする * リクエスト自身をブロックする(この場合もちろん受信もできない) の2種類があります。 前者は、CORSが許可されていない状況で単純リクエストを行う場合です。 質問文のコードはこれに当てはまります。 CORSを許可するためには、質問文中のエラーメッセージにある通り、 `localhost` サーバがレスポンスヘッダに `Access-Control-Allow-Origin` を適切に設定する必要が有ります。 (ただし今回の目的はサーバにリクエストを送信することだと思いますので、エラーが出たままでも目的は達成できていると思います。) 後者は、CORSが許可されていない状況で単純リクエスト**ではない**リクエストを行う場合です。 単純リクエストと異なり、実際の送信を行う前にプリフライトリクエストでCORSが許可されているかどうかを確認します。 従って、`localhost`サーバが適切にプリフライトリクエストに応答しなければ送信自体が行われません。 > > `` で使用する場合。(後略) > > > ただし`Cross-Origin-Resource-Policy` レスポンスヘッダ)で制御可能です。 > > google analytics とかはぜんぜん関係ないサイトの情報を google に送信できたり > > > Google Analyticsへのリクエストは単純リクエストで、かつレスポンスヘッダに適切な `Access-Control-Allow-Origin` が付与されていると思います。