ツール一覧

ローカル開発でCORSエラーが出る原因と3つの回避策

CORS フロントエンド エラー解決 開発
結論

ポート番号が違うだけで「別オリジン」になる。バックエンドでヘッダーを返すか、フロントのProxy機能で回避する。

なぜlocalhost同士でエラーになるのか

ブラウザの同一オリジンポリシーにより、プロトコル+ドメイン+ポート番号が全て一致しないと別オリジン扱いになります。

フロントエンド APIサーバー
http://localhost:3000 http://localhost:8080
ポート3000 ポート8080 → 別オリジン
よくある勘違い

PostmanやcurlではCORSエラーは出ません。CORSはブラウザ固有のセキュリティ制限です。

回避策1:バックエンドでCORSを許可する(王道)

// Express の例
const cors = require('cors');
app.use(cors({
  origin: 'http://localhost:3000'
}));

回避策2:フロントのProxy機能を使う(バックエンドをいじれない時)

// vite.config.ts
export default defineConfig({
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true,
      }
    }
  }
});

これで fetch('/api/users') のように相対パスでリクエストすればCORSを回避できます。

回避策3:ブラウザ拡張で一時的に無効化(非推奨)

検証時に限り、CORS無効化のブラウザ拡張を使う方法もあります。本番では絶対に使わないでください。

まとめ

CORSエラーはサーバー側の設定で解決するのが正攻法です。バックエンドを触れない場合はProxy機能を使いましょう。

🧪 JSON整形ツールでAPIレスポンスを確認

APIのレスポンスを整形して確認できます

試す