JSONファイルを利用してデータの読み込みと追加をするために、JavascriptとphpをAjaxで連携しようとした際にクロスドメインエラーが出たのでその対処法を簡単にメモ。
目次
Ajaxによる別ドメインへのアクセスに関して
だいたい連携させる場合は、同じドメインにファイルを置くので意識していなかったのですが、今回はVue CLIでlocalhost
環境で作業していて、phpファイル自体は自分のサーバーにアップしていました。
ただ別ドメインへファイルをアップしていたので、以下のようなエラーが出てしまいました。
Ajaxを利用する場合は取得したいファイルが 同一ドメイン上に存在していないとデータの送受信が行えないという制約がありました。巷でいうクロスドメイン問題ってやつですね。
何が原因なのか?
上記のようなエラーを見るとCROSというキーワードが出てきます。
CORSとは? ざっくりいうと【Cross Origin Resourse Sharing】の略で Ajaxなどで異なるドメイン間で通信する場合の安全に行われるような規約といったところでしょうか。
つまりエラーの内容はCORSによって、http://localhost:8080からdata.phpへのアクセスは許可されてないよーって注意されちゃってるようなもんでしょうか。
別ドメインへのアクセスを許可するには?
どうやったら別ドメインへのアクセスが許可されるのかというとPHP側で許可してあげる方法があります。
header関数でヘッダ情報( Access-Control-Allow-Origin)をセットしてあげる
PHPにはHTTPのヘッダ情報を送信するために使用するheader関数があるのですが、そこにヘッダー情報のひとつである【 Access-Control-Allow-Origin 】をセットして特定のドメインからのリクエストを許可しますというのを指定してあげればいいでしょう。
また特定のドメインだけでなく全てのリクエストを許可する場合は、*
ワイルドカードを指定する事も可能です。
//特定のドメインからのリクエストを許可 header("Access-Control-Allow-Origin: http://localhost:8080"); //すべてのドメインからのリクエストを許可 header("Access-Control-Allow-Origin: *");
まとめ
以上のようにAjaxでPHP側と通信した際に異なるドメイン間で発生したエラーは解消されました。大抵は同じドメインで通信取るのであまりこういった機会はないかもですが覚えておいて損はないかなと。