micomia株式会社の井上です。今回はCORSについて解説していきます。
初心者にも分かりやすく解説していくのでぜひご一読ください。
1. CORSとは?
CORS(Cross-Origin Resource Sharing)とは、簡単に説明すると「異なるドメイン間でのデータのやり取りを制御する仕組み」のことです。
直訳すると「オリジン(=場所)をまたいでリソースを共有する」仕組みです。
ここで言うオリジンとは、プロトコル + ドメイン + ポート番号の組み合わせのことで、これらのいずれかが違うと「別のオリジン」と見なされます。
たとえば、https://myapp.web.appと https://api.web.app はドメインが異なるため別オリジンです。http://example.com と https://example.com のようにプロトコル(httpとhttps)が違う場合も、別オリジンとして扱われます。
通常、ブラウザはセキュリティ上の理由から「同じオリジン以外の通信を制限する」というルールを持っているので、あるWebアプリが別のオリジンのサーバーにデータを取りに行こうとするとブラウザによってブロックされてしまいます。
この制限を安全な形で緩め、サーバーが「特定のオリジンからのアクセスを許可する」ための仕組みがCORSです。
2. なぜCORSエラーが起こるのか
普段私たちが使っているブラウザには、Same-Origin Policy(同一オリジンポリシー)というセキュリティルールがあります。
例えば、FlutterFlowで作成したアプリがhttps://myapp.web.appというオリジンで動作しており、外部のAPI https://api.example.com にアクセスしようとした場合を考えます。
両者のオリジンは異なるため、ブラウザが安全のために通信を遮断します。これがCORSエラーです。
しかし実際の開発では、悪意のある通信だけでなく、正しい通信までもがこの制限によって遮断されてしまう場合があります。
つまり、両者のオリジンが異なるとエラーが発生してしまう=正しい通信も遮断されてしまうということです。
こんな時に登場するのが、CORS設定です。
3. CORS設定
正しい通信も遮断されてしまわないように、サーバー側でそのサイトからの通信が安全であることを明示する必要があります。
そのために、レスポンスヘッダーの Access-Control-Allow-Origin にアクセスを許可したいオリジン(=呼び出してくる側のフロントエンドのURL)を指定します。
これにより、ブラウザはそのオリジンからの通信を安全なものとして認識し、データのやり取りを許可します。
4. まとめ
CORS, CORSエラー、CORS設定のそれぞれの内容と役割をまとめると以下のようになります。
今後FlutterFlowや他のWeb開発でAPI連携を行う際は、「CORSとは何か」「なぜエラーになるのか」「どう設定すれば良いか」を意識しておくと、よりスムーズに開発ができるようになります。
要素 | 内容 | 役割 |
|---|---|---|
CORS | 異なるオリジン間での通信を安全に行うための仕組み | 安全な通信の枠組み |
CORSエラー | サーバーが許可していないオリジンから通信しようとした時のブラウザのブロック | セキュリティ保護の結果 |
CORS設定 | サーバーが許可するオリジンを指定して安全な通信を実現する方法 | エラーを解決する手段 |


.webp%3Falt%3Dmedia%26token%3D44d272c7-1e7a-46d7-86de-dc2bec67a3e4&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Dbc168691-5281-4eab-8c08-ed7fe5624582&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8f9453ad-d017-4640-8b7b-4c5d55391f46&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D904686c4-e792-4c6a-b5ce-e7648fd53404&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8db330f1-3fab-48b7-8dcf-dd8c6f47836a&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Ddef3da75-721c-4e42-8cd8-f06795bb771f&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8fec979d-a6dc-4d03-960f-330f997108a7&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D6bddee16-071d-41fd-8a4b-f2026bcff617&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D9ba70870-6b39-4eab-b9c2-e126ef08cb09&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8a795f56-e8a9-4be1-937b-65c1a89922b3&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Dbe65d589-2f4c-4ad8-82a1-7ddb73af2620&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D0aa104f5-928b-4ddf-a535-d8574b7667a8&w=3840&q=75)

.webp%3Falt%3Dmedia%26token%3D45131e3d-4777-421a-a556-bcc8d462dfe1&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D09daf923-4a62-4c31-af6f-f3d99a9f635b&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D0e63e93b-1558-48a5-8b24-d1ae7cfa487f&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D240fcc34-b7e7-4c86-b294-fdfc2a66db21&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Db288c602-2902-4f93-8eca-903ec8f86440&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D6040f2d9-1a54-476c-9999-5e0aeb8e8a74&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D3c4b1b17-9fec-405e-9e02-8d34961b6f16&w=3840&q=75)