icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

CORS(Cross-Origin Resource Sharing)エラーの対処方法→同一オリジン設置orヘッダー許可

更新: 2024/05/19 1957文字

今回は、javascriptおよびそれ系ライブラリで通信しているときに発生しがちな『CORS(Cross-Origin Resource Sharing)エラー』について取り上げます。管理人が明確に覚えているケースは、2つありました。早速CORSの定義を確認し、エラーに対処してみましょう。

CORSエラーとは?当サイト管理人が遭遇したケースは?

CORS(Cross-Origin Resource Sharing)

ネットの用語で同一オリジンポリシー (same-origin policy)っていうのがあるんですけど、『二つのページのプロトコル、ポート番号、ホストが等しい場合は同一オリジンとみなす』というような考え方です。他のオリジンにあるリソースへのアクセス方法を制限したりします。

この同一オリジンポリシーに反して、別オリジンよりリソース読み込み時に出るのが、CORS(Cross-Origin Resource Sharing)エラーです。javascriptのXMLHttpRequestやFetch APIのような機能は、特にこの影響をうけます。

管理人遭遇ケース1:サーバー上jsonに、ローカルからvue&axiosでアクセス

ローカルで作っていて、このサイトのドメインが割り当ててあるサーバー上のリソースに、vue&axiosでアクセスしました。『blocked by CORS policy』という表示がコンソールに出ています。

ホスト名が基本的に『localhost』となるので、外部サーバー上のリソースも基本的に同一オリジン以外という判定になりそうですね。

管理人遭遇ケース2:ローカルからFetch APIでRSSを取るとき

こちらもローカルで、先日Fetch APIでRSSを取るというのをやっていたんですけど、最初は表示しませんでした。

上のケースとちょっとエラー文章が違いますが『Access-Control-Allow-Originヘッダーが無いよ』とのことです。これで2通りの対処方法が想定されました。

CORSエラーに対処した方法

同一オリジンになるように、リソース取得先と同じサーバーにアップ

これは一番簡単です。同じサーバー・同じドメインのディレクトリに入れてしまえば、同一オリジンとみなされるので、CORSエラーはでません。

.htaccessファイルでAccess-Control-Allow-Originヘッダをセットする

ケース2のメッセージでAccess-Control-Allow-Originヘッダーという項目が出てきたので、リソース取得先(このコラムサイトです)の.htaccessファイルで、Access-Control-Allow-Originヘッダーを設定しました。

<IfModule mod_headers.c>
 Header set Access-Control-Allow-Origin: *
</IfModule>

基本的に外部に対して公開されている情報であれば『*』で全部許可できます(後悔したくない情報がある場合は、アクセスコントロールを別途設定します)。

また、『Header set Access-Control-Allow-Origin "アクセスを許可するオリジンurl"』のように書くことができます。

あとがき・まとめ

  • 同一オリジンポリシーというのがあり、オリジンが違う場合Fetch APIなどでアクセスできないことがある
  • 同一オリジンになる環境にアップしてCORSエラーを回避できる
  • .htaccessファイルで Access-Control-Allow-Originヘッダ設定できる点も押さえておくとベター

まとめると、こんなところでしょうか。最近フロントで取ってくるみたいなのも作っていたので、押さえられてよかったです。


【カテゴリ】- サイトエラー対策と復旧
【タグ】-

関連記事