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

VPSのCentOS上にVirtualBox+Vagrantをインストール

普段使っているPCにVirtualBox+Vagrantをいれることはあったんですが、VPS上のCentOSに仮想環境を入れたいとの要件があり、試してみました。 結論からすると結局できなかったんですが …

no image

JSでの金額変換で気をつけることなど

以前、ちょっと特集した JSでの画面の金額集計 の続きです。 画面で帳票系のアプリを作ろうとしている時など、画面上の値から金額の合計金額を出すなどがよく見られます。 すごく基本的ですが、PHPに慣れて …

no image

jQuery子要素の取得方法など

jQueryで要素を取得する方法って$(“セレクタ”)しか知らなかったんですが、他にもいろいろあることがわかったのでちょっと紹介。 例えばtrの列の中に横1列に<inpu …

no image

カレントディレクトリ以下のすべてのCR+LFをLFに

windows環境からファイルをアップしていると文字コードがバラバラだったりすることが多々あります。 まあ何がめんどくさいかというと差分がチェックできない。これが最悪です。 gitのdiffコマンドの …

no image

herokuでのhttpd.conf設定

前回の記事でLet’s EncryptでSSL設定する場合、 http://ドメイン/.well-known/ というURLにアクセスする必要があります。 ただherok …

アーカイブ