CORS(コルス)
Cross-Origin Resource Sharing・クロスオリジン制御。Access-Control-Allow-Origin/Methods/Headers/Credentialsヘッダ、preflight request(OPTIONS)・credentials: include対応、Fetch API・axios・SWR連携、Cloudflare Workers/Vercel Edge/Hono cors middleware・fastify-cors・@supabase/cors設定が2026年主流。
概要
CORS(Cross‑Origin Resource Sharing)は、ブラウザが別オリジンのリソースへアクセスする際に、サーバ側が許可を与える仕組みです。
サーバは Access‑Control‑Allow‑Origin、Access‑Control‑Allow‑Methods、Access‑Control‑Allow‑Headers、Access‑Control‑Allow‑Credentials などのヘッダを返し、
クライアントは fetch()、axios、SWR でリクエストを送るときに credentials: include を指定して認証情報を送信できます。
OPTIONS メソッドで送られるプリフライトリクエストは、実際のリクエストが許可されるかを確認するために必須です。
2026年現在、Cloudflare Workers、Vercel Edge、Hono cors middleware、fastify-cors、@supabase/cors 設定が主流となっています。
主な特徴・仕組み
Access‑Control‑Allow‑Originで許可するオリジンを列挙Access‑Control‑Allow‑Methodsで許可する HTTP メソッドを指定Access‑Control‑Allow‑Headersで許可するリクエストヘッダを列挙Access‑Control‑Allow‑Credentialsを true にすると Cookie や Authorization ヘッダを送信可- プリフライトリクエストは OPTIONS で送られ、サーバは
Access‑Control‑Max‑Ageでキャッシュ期間を設定 - Fetch API では
mode: corsがデフォルト、credentials: includeで認証情報を送信 - axios では
withCredentials: true、SWR ではfetcherにcredentials: includeを渡す - Edge ランタイム(Cloudflare Workers, Vercel Edge)では
addEventListener('fetch', ...)内でResponseにヘッダを付与 - Hono では
app.use('*', cors())で簡易設定、fastify-cors ではfastify.register(require('fastify-cors'), { ... }) - @supabase/cors は Supabase プロジェクト設定で
corsオプションを指定
スペック/製品比較表
| フレームワーク | ミドルウェア | デフォルト CORS | プリフライト対応 | Credentials |
|---|---|---|---|---|
| Express | cors() | なし | あり | あり |
| Fastify | fastify-cors | なし | あり | あり |
| Hono | cors() | あり | あり | あり |
| Cloudflare Workers | なし | あり | あり | あり |
| Vercel Edge | なし | あり | あり | あり |
具体例・対応製品
自作PCで CORS を扱う際に選ぶハードウェア例。
- GPU: RTX 5090 (24GB GDDR7, 5.7GHz)
- CPU: Ryzen 9 9950X3D (8MB L3, 5.0GHz)
- CPU: Core Ultra 9 285K (3.5GHz, 16MB L3)
- メモリ: DDR5-6000 (32GB)
- ストレージ: PCIe 5.0 x16 NVMe SSD (2TB)
- 電源: 650W PSU
- ネットワーク: 2.5Gbps LAN
- ファン: 120mm 風量 1200CFM
- モニタ: 27" 4K 144Hz
- ケース: 600mm ATX
- OS: Ubuntu 24.04 LTS
これらのスペックは 2025年に登場した次世代ハードウェアで、CORS を利用した API サーバを構築する際に最適です。
自作PCでの選び方・注意点
- サーバソフトは 2026年に更新されるフレームワークを選択
- CORS 設定はプロダクション環境で必ず有効化
Access‑Control‑Allow‑Credentialsを true にする場合はオリジンを限定- プリフライトリクエストはキャッシュ期間を長めに設定し、帯域を節約
- Edge ランタイムを利用する場合は
addEventListener('fetch', ...)内でヘッダを付与 - Hono で
cors()を使用する際はoriginオプションで許可リストを設定 - fastify-cors では
methods、allowedHeadersを明示的に列挙 - @supabase/cors は Supabase Dashboard で
cors設定を行い、API キーを安全に管理 - ネットワークカードは 2.5Gbps 以上を推奨、遅延を抑える
- 省電力モードをオフにして、API サーバの応答時間を安定化
関連用語との違い
- Same‑Origin Policy: ブラウザが自動で適用する制限で、CORS はその例外を許可する仕組み
- CSP(Content Security Policy): スクリプトやリソースのロード元を制御、CORS はリクエストヘッダで許可を与える
- CSRF(Cross‑Site Request Forgery): 認証情報を悪用した攻撃、CORS は
credentialsを制御して対策 - OIDC(OpenID Connect): 認証プロトコル、CORS は認証情報の送信許可を設定
- JWT(JSON Web Token): トークンベース認証、CORS はトークンを含むヘッダを許可
よくある質問
Q1: プリフライトリクエストは必須ですか?
A1: メソッドが GET/HEAD 以外、またはカスタムヘッダを送る場合は必須です。
Q2: Access‑Control‑Allow‑Credentials を true にすると安全性が落ちますか?
A2: オリジンを限定すれば安全。無制限に許可すると Cookie が漏れる恐れがあります。
Q3: Edge ランタイムで CORS を設定する際の注意点は?
A3: Response オブジェクトにヘッダを追加し、event.respondWith で返す必要があります。
まとめ
CORS は Web アプリケーションが安全に別オリジンへアクセスするための不可欠な仕組みです。
2026年に主流となった Cloudflare Workers、Vercel Edge、Hono cors middleware、fastify-cors、@supabase/cors 設定を活用し、
自作PCで構築する API サーバに適切に導入すれば、認証情報の送信やプリフライト処理をスムーズに行えます。
RTX 5090、Ryzen 9 9950X3D、Core Ultra 9 285K、DDR5-6000、PCIe 5.0 x16 など最新ハードウェアを組み合わせることで、
高性能かつ安全な開発環境を実現できます。