1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】CORSとは何か?仕組みと解決方法をやさしく解説!

1
Posted at

【初心者向け】CORSとは何か?仕組みと解決方法をやさしく解説!

Webアプリを開発していると、APIにアクセスしたときに
「CORSエラー」が出て困った経験、ありませんか?

この記事では、CORS(Cross-Origin Resource Sharing)の基本から、
なぜ必要なのか、そしてどうやってエラーを解消するか
をわかりやすくまとめています。


✅ CORSってなに?

CORS(Cross-Origin Resource Sharing)
日本語では 「オリジン間リソース共有」

簡単にいうと、異なるオリジン(Origin)間でデータをやり取りするための仕組みです。


🧭 そもそもオリジン(Origin)とは?

オリジンとは、以下の3つを組み合わせたものです:

  • スキーム(例:https
  • ドメイン(例:youtube.com
  • ポート番号(例::443

例えば:
https://youtube.com:443

このURL全体が「オリジン」です。

下記のように、オリジンが違えば別物と見なされます。

  • https://youtube.com:443
  • https://twitter.com:443

❌ なぜCORSが必要なの?

Webブラウザは 「同じオリジン」からのリクエストしか基本的に許可しません。

これには理由があって、悪意のある攻撃からユーザーを守るためです。


🔒 セキュリティ上の理由(例)

  1. 正規サイトにログイン済みのユーザーが、
  2. 悪意あるサイトを開いてしまう
  3. その悪意あるサイトがAPIを勝手に叩く
  4. Cookieも勝手に送られてしまい、なりすまし成功…

こういった「クロスサイト攻撃」を防ぐため、デフォルトではブロックされるようになっています。

🤔 でも開発中は不便…

開発中に以下のような状況でよく困ります。

フロントエンド → localhost:5500

バックエンド(API) → localhost:5000

このとき、フロントエンドからバックエンドに値を渡すときに

たったポート番号が違うだけですが、オリジンが異なると判断され、CORSエラーになります。

✅ 解決策:CORSを許可してあげる

Node.js + Express であれば、corsモジュールを使って設定できます。

① corsモジュールをインストール

npm install cors

② ミドルウェアとして使う

const express = require('express');
const cors = require('cors');

const app = express();

app.use(
  cors({
    origin: "http://127.0.0.1:5500",  // 許可したいオリジン
    methods: ["GET", "POST"],         // 許可したいHTTPメソッド
    credentials: true                 // Cookieを許可するかどうか
  })
);

app.listen(5000, () => {
  console.log("APIサーバー起動中");
});

これで、ポート5500からのアクセスが許可されます。

🏰 イメージ:門番がオリジンをチェックする感じ

┌──────────────┐
│ クライアント │ ← http://localhost:5500
└──────────────┘


┌──────────────┐
│ APIサーバー │ ← http://localhost:5000
└──────────────┘

「このオリジンは許可してる? → OK、通してよし!」
サーバーが“許可されたオリジン”だけを通す、門番のような仕組みです。

📌 補足:CORSはブラウザの仕様

Postman や curl は CORS を無視できます(サーバーと直接通信するため)

CORS を制御しているのは ブラウザ側です

✅ まとめ

項目 内容
CORSとは? オリジン間でリソースを安全に共有する仕組み
なぜ必要? クロスサイト攻撃(XSSやCSRF)を防ぐため
開発中の問題 ポート違いなどでオリジンが違い、リクエストがブロックされる
解決方法 サーバー側でCORS設定を明示し、特定のオリジンを許可する

💬 最後に
CORSは一見ややこしく感じますが、サーバー側での明示的な許可設定がポイントです。

開発中や本番環境でも、しっかりとオリジンの制御を行って、安全で柔軟なWebアプリを作っていきましょう!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?