skillup

技術ブログ

JavaScript サーバー・ネットワーク

クロスドメインがらみのajax

投稿日:2019年2月23日 更新日:

ajaxで別ドメインに対して、プログラムを実行したい時に注意すべきことなどを。

ログ、レスポンスヘッダをとにかく追う

アクセス先のログやブラウザのレンポンスヘッダーを注意深くみてどういう結果が帰ってきているのかをしっかり追うようにしましょう。その上で下記のような対策が必要になってきます。

特定ドメインからの許可

ajaxから直で他サーバーにアクセスをする場合ですが、下記のようなエラーメッセージが出て弾かれる場合が多いかと思います。

通常ですとクロスドメインからのリクエストが許可されていないことが多いため、弾かれます。

この場合、APIを受けとる側での.htaccessなどに下記のような設定を書いておけば許可することができます。

アスタリスクは全許可ですが、POST,GETなどのメソッド単位でのコントールやHearderでのControlもできるでしょう。

*ただしmod_headerがインストールされていることが前提のようです。

フレームワーク側での認証ロジック(フレームワークによる)

上記のような対策をしてもエラーが返ってきてしまうということは多いかと思います。その場合、302エラーの場合、フレームワークの認証ロジックを疑ってみましょう。

私の場合、Laravelだったのですが、Routeでコントロールできる通常の認証以外にも、認証をコントールしている場合があるので、その部分を調べてみましょう。

CSRF対策(フレームワークによる)

Laravelの場合、上記の対策がディフォルトで組み込まれているので、通常認証をクリアできても500エラーが返ってきます。その場合、MiddleWare内でIP制限などをすると良いと思います。

一例として下記のような書き方ができます。

500エラー対策

実際のAPIまで処理が飛んでいればあと一歩かと思いますが、500エラーで返ってきてしまう場合はプログラムのどこかで落ちているため、とにかくこまめにログを追うしかないと思います。

API時の実装時に注意しておきましょう。

ajax側のHTTPヘッダ

ajax側のHTTPリクエストが適切でない場合、配列を送っているのに、内容がからということがあります。その場合、ajaxのheadをapplication/jsonにするかJSON.stringifyでPOST内容を文字列化しましょう。

ちなみにブラウザでajaxを飛ばして直接アクセスするより、ローカルのPHPにajaxにアクセスをして、PHP側からサーバーを通してAPIにアクセスした方がテストも簡単で実行しやすいです。(CurlよりはGuzzleなどのライブラリを使いましょう。)

参考リンク

サーバサイドのCORS対応

XHR2でサブドメインのワイルドカードOriginに対してCORSを許可する設定、他。

Laravel5.5 で Cross Domain する

今時のPHP HTTPクライアントのGuzzleを使ってみた

 

-JavaScript, サーバー・ネットワーク
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

ケース別JavaScriptライブラリまとめ

Webエンジニアとしてはサーバーサイドのプログラムのみならず、JavaScriptをいじることがおおいでしょう。 私自身、昔はわけがわからず大嫌いだったんですが、最近はデバッグが楽なこともあり、結構愛 …

no image

Vue.jsについて

次の現場で使うかもしれない技術ということでvue.jsをちょこちょこっと勉強。とっていっても1時間ぐらいしか勉強しておらずイントロだけですが・・ Contents1 vue.jsとは?2 ソース3 参 …

no image

DNSの仕組み

本日はDNSについて。 とりあえず要点のみ DNSのざっくりとした仕組み ネットワーク上での住所を決める仕組み。 本来はIPがその役割を果たしている. [crayon-65114db8821ce577 …

no image

linuxでのherokuのインストール&パスの通し方

linuxでのherokuのインストールやパスの通し方について 原則としてruby入ってないとダメっぽいです。(しかもruby1.8系だと2016年6月現在エラーが出ますので最新バージョンをインストー …

no image

nginxのSSL通信や認証、ログに関して

今回はnginxでSSL通信をする際の注意点など。といっても、それほど難しくないようでSSL通信をするには主に2つだけです。 SSLを利用することを明示 サーバー証明書と秘密鍵を指示する またngin …

アーカイブ