CakePHP5入門【補足⑤】WebAPIにおけるCORS
C菜
B美
C菜
なので、社内のWebサーバ上にWebAPIを呼び出すHTMLファイルを置いてアクセスしてみたんですよ~
A子
C菜
何度試しても「通信エラー」になっちゃいます~
B美
(注:2026年5月8日時点)
もしもブラウザがEdgeであるならば、「F12」キーを押して開発者ツールを表示してちょうだい
そのあと、コンソール(Console)を表示した状態で、HTMLファイルにアクセスしてWebAPIを呼び出してみてね
C菜
あれ?
なんかエラーが出ましたよ~
「blocked by CORS policy」って何ですか~?
B美
A子
なんかの略?
(英単語の頭文字をとったものっぽい)
B美
Cross-Origin Resource Sharingの頭文字を繋げたものね
オリジンをまたいで(クロスオリジン)資源(リソース)を共有する(シェアリング)仕組みよ
A子
そもそも「オリジン」って何なのさ
C菜
B美
例えば、「https://friction-river.jp」において、実は「ポート番号(443)」が省略されてるの
なので、正確には「https://friction-river.jp:443」なんだけど、これって
・通信プロトコル(スキーム):https
・ドメイン:friction-river.jp
・ポート番号:443
の組み合わせなのね
で、この全体を「オリジン」って呼ぶの
C菜
B美
実はブラウザソフトって、同一オリジンじゃないと通信を許可しない仕組みになってるのよ
A子
だったら別のサイトの画像を「img」タグで表示したりもできないの?
B美
基本的に、禁止されてるのはJavaScriptからのアクセスね
例えば、通販サイト(A)にログインした状態で、悪意あるサイト(B)を見たとしましょう
(B)のWebページの中に(JavaScriptによって)(A)の会員情報を表示するURLへのアクセスが記載されてたらどうなる?
C菜
B美
仕組みとして素晴らしいのは、デフォルト状態で「異なるオリジンを禁止」していることね
うっかりサーバ設定をミスったりする心配は無いってことよ
A子
ちなみに、異なるオリジンを禁止しているのはサーバなの?
クライアント(ブラウザソフト)なの?
B美
そして「許可」する設定を行うのはサーバ側ってわけ
C菜
B美
A子
B美
複合的な要因で、CORSポリシーを突破できないことが多々あるの
(OPTIONSが厄介なのよね)
C菜
B美
|
cd html/numapp[Enter]
composer require rrd108/cakephp-cors[Enter] bin/cake plugin load Rrd108/Cors[Enter] |
「MATE端末」を開いて、上記を打ち込んでね
A子
B美
設定ファイルを書かなきゃいけないわ
「numapp/config」ディレクトリの中に「cors.php」というファイルを作成します
|
<?php
return [ 'paths' => [ '/numapp/api/*', ], 'allowedOrigins' => [ '*' ], 'allowedMethods' => [ 'GET', 'OPTIONS', ], 'allowedHeaders' => [ 'Content-Type', ], 'exposedHeaders' => [], 'maxAge' => 0, 'supportsCredentials' => false, ]; |
C菜
B美
管理ページ(numapp/admin)なんかには、アクセスさせたくないからね
A子
B美
でもオリジン制限を行わないなら、ワイルドカードである「*」でOKよ
あと、なにげに重要なのが「allowedMethods」で、必要が無ければ「POST」は省いたほうが良いと思う
でも「OPTIONS」は絶対に必要だから忘れないように!
C菜
B美
それが「OPTIONS」よ
A子
だから「OPTIONS」も許可しておかないとダメなのか
B美
C菜
冒頭のテストをもう一度行ってみなさい
C菜
できました~
ばっちり動いてますよ~
A子
いよいよWebAPIらしくなってきたね
C菜


