コンテンツにスキップ

ntorelabo

Front End Developer

  • pickup
  • WordPress
  • PHP
    • PHP技術者認定試験
  • Docker
  • Next.js
  • AWS
  • Laravel
  • site map
  • search

ntorelabo

Front End Developer

  • search
  • pickup
  • WordPress
  • PHP
    • PHP技術者認定試験
  • Docker
  • Next.js
  • AWS
  • Laravel
  • site map

CORSエラー(Cross-Origin Resource Sharing Error)とは?「Access-Control-Allow-Origin」「プリ フライト リクエスト」

  • ホームページ
  • CORSエラー(Cross-Origin Resource Sharing Error)とは?「Access-Control-Allow-Origin」「プリ フライト リクエスト」
  • 12月, 土, 2024
  • Docker
CORSエラー(Cross-Origin Resource Sharing Error)とは?「Access-Control-Allow-Origin」「プリ フライト リクエスト」

Contents [hide]

  • 1 CORSエラーとは
  • 2 「Access-Control-Allow-Origin」の設定
  • 3 プリフライトリクエストとは
    • 3.1 プリフライトが必要になるケース
    • 3.2 プリフライトリクエストの流れ
    • 3.3 開発者ツールでの確認方法
  • 4 ローカルのNext.jsのプロジェクトからさくらインターネットのレンタルサーバーのphpのAPIにアクセスする場合

CORSエラーとは

CORSは「異なるオリジン(ドメイン、プロトコル、ポート)間でのリソース共有」を制御するセキュリティの仕組みです。

そのため異なるオリジン間でリソースをリクエストしようとする際にブラウザが制限をかけることにより、CORSエラーが発生します。

ウェブサイト localhost:3000 fetch(‘/api/data’) APIサーバー localhost:8000 Access-Control-Allow-* ブラウザ CORSチェック ✓ オリジンの確認 ✓ メソッドの許可 ✓ ヘッダーの確認 CORSエラーが発生する場合: 1. オリジンの不一致(例:localhost:3000からのリクエストに対し、サーバーが異なるオリジンを許可) 2. 許可されていないHTTPメソッド(GET/POST/PUT等)の使用

「Access-Control-Allow-Origin」の設定

異なるオリジン間のリクエストで制限をうけずにアクセスするためには、レスポンスヘッダーに「Access-Control-Allow-Origin」を指定することで可能になります。

https://zenn.dev/syo_yamamoto/articles/445ce152f05b02

プリフライトリクエストとは

異なるオリジン(ドメイン)へリクエストを送る前の「事前確認」

  • 本来のリクエストを送る前に、そのリクエストが安全かどうかを確認します
  • HTTPのOPTIONSメソッドを使用して送信されます

プリフライトリクエストはブラウザが自動的に行います。開発者が明示的にコードを書く必要はありません。

プリフライトが必要になるケース

  • 特殊なヘッダーを使用する場合
  • application/jsonなどの特殊なContent-Typeを使用する場合
  • GET/POST/HEAD以外のメソッド(PUT、DELETEなど)を使用する場合

プリフライトリクエストの流れ

ブラウザがOPTIONSリクエストを送信 サーバーがCORS設定を返答 許可された場合のみ、本来のリクエストを送信

CORSリクエストパターン パターン1: Simple Request (プリフライトなし) フロントエンド API サーバー GETリクエスト/通常フォーム送信 パターン2: プリフライト成功パターン フロントエンド API サーバー 1. OPTIONSリクエスト 2. CORS OK 3. 本来のリクエスト パターン3: プリフライト失敗パターン フロントエンド API サーバー 1. OPTIONSリクエスト 2. CORS エラー 本来のリクエストは送信されない

開発者ツールでの確認方法

  1. ブラウザの開発者ツールを開く
  2. Networkタブで確認
    • OPTIONSメソッドのリクエスト → これがプリフライトリクエスト
    • その直後の本来のリクエスト

リクエストヘッダー:

  • Origin: [送信元のドメイン]
  • Access-Control-Request-Method: [使用予定のメソッド]
  • Access-Control-Request-Headers: [使用予定のヘッダー]

レスポンスヘッダー:

  • Access-Control-Allow-Origin: [許可されているドメイン]
  • Access-Control-Allow-Methods: [許可されているメソッド]
  • Access-Control-Allow-Headers: [許可されているヘッダー]
Elements Network Console Name Method Status /api/data OPTIONS 204 /api/data POST 200 プリフライトリクエストの確認方法: 1. ブラウザの開発者ツールを開く (F12 または右クリック → 検証) 2. Networkタブを選択 3. OPTIONSメソッドのリクエストを探す 4. リクエストをクリックすると詳細が表示される: – Request Headers: Origin, Access-Control-Request-Method – Response Headers: Access-Control-Allow-Origin, Methods, Headers

ローカルのNext.jsのプロジェクトからさくらインターネットのレンタルサーバーのphpのAPIにアクセスする場合

最近の投稿
  • WordPressサイトのサブディレクトリ→サブドメイン移行手順 2025年7月6日
  • Laravelでリッチテキストエディタで使いやすい画像アップロード機能を実装(TinyMCE) 2025年6月22日
  • 【PHP】出力バッファリング制御 2025年5月22日
  • basic認証のパスワードを忘れた場合 2025年5月14日
  • PHP 8.0〜から実装で便利な機能(名前付き引数、match) 2025年5月11日
  • さくらインターネットからWHOIS登録メールアドレスの利用廃止のメールが来た 2025年5月9日
  • スムーズにスクロールする処理をjQueryで実装 2025年5月5日
  • Gemini for Google Workspace 活用術 2025年4月24日
  • Google Cloud の始め方 2025年4月20日
  • 【PHP】switch分の書き方、PHP 7.3 から PHP7.4の変更点 2025年4月19日
  • 【PHP】新しい方の指定方法「nullable」 2025年3月25日
  • 「PHPでJSONを扱う」json_encodeとjson_decode完全ガイド 2025年3月23日
  • 【WordPress自作テーマ開発】固定ページを自動作成する方法(下層ページ実装) 2025年3月18日
  • 【PHP】プロトコル / ラッパーについて(file:// php:// http:// https://) 2025年3月17日
  • 【PHP】stdClass を使用して(object) でキャスト 2025年3月16日
  • モダンなPHPコードで使用!無名関数の使い方 2025年3月15日
  • Cursor 便利な機能まとめ、Project Rules 2025年3月15日
  • PHP セッション名の変更方法と php.ini の記述方法まとめ 2025年3月12日
  • 【PHP】関数内でグローバル変数を使用するためには global キーワード 2025年3月10日
  • 【php8上級/準上級試験】模擬問題解説 問題30 strtotime() 2025年3月4日
About Us

Ready To Start Work With Us?

Felis consequat magnis est fames sagittis ultrices placerat sodales porttitor quisque.

Get a Quote
recent posts
  • WordPressサイトのサブディレクトリ→サブドメイン移行手順
  • Laravelでリッチテキストエディタで使いやすい画像アップロード機能を実装(TinyMCE)
  • 【PHP】出力バッファリング制御
  • basic認証のパスワードを忘れた場合
  • PHP 8.0〜から実装で便利な機能(名前付き引数、match)
  • さくらインターネットからWHOIS登録メールアドレスの利用廃止のメールが来た
  • スムーズにスクロールする処理をjQueryで実装
  • Gemini for Google Workspace 活用術
Opening Hours
Week Days 10:00 - 17:00
Saturday 10:00 - 15:00
Sunday Day Off
Contact us
popular posts
  • WordPressで画像を拡大表示するなら「Firelight Lightbox」(旧名:Easy Fancybox) 1.1k件のビュー
  • 【WordPress】カスタムフィールド作成の仕方「ACF」Advanced Custom Fieldsの使用法 742件のビュー
  • 【チートシート】Linuc Lv1-102 実務での使用例も解説 606件のビュー
  • My-Snow-Monkey使用例、子テーマによるカスタマイズ 512件のビュー
  • 【WordPressエラー】「Warning: Undefined variable $post in …」「Warning: Attempt to read property “ID” on null in …」 461件のビュー
  • Twitter、Facebookのタイムラインを埋め込む 415件のビュー
  • 【Next.js】ライブラリ使わないでカルーセルスライダー 303件のビュー
  • ローカル、グローバルIPアドレスの違いと確認手順 273件のビュー
  • AWS認定ソリューションアーキテクト-アソシエイトレベル 248件のビュー
  • WordPress自作、カスタマイズ 228件のビュー
Search
Copyright © 2025 ntorelabo | Powered by Desert Themes