俺は基本的に開発しない。ほとんど外注にして、要件定義とかスケ管を主な仕事にしている。
そうは言っても、ちょっとしたものなら、自分で作ったほうが早いし、自由も利くし、金もかからない。
そんなわけで、ちょくちょくプログラムを書いているのだが、そのうちの一つが、つい昨日完成した。
要件は、携帯キャリアのゲートウェイIPアドレスのみ通信を許可するよう、.htaccessを書き換えるレシーバと、複数のWEBサーバに向けて.htaccessの内容を一括配信するセンダならびに管理画面だ。
この管理画面というのは、WEBサーバとキャリアIPアドレスをテキストに保存し、送信ボタンを押下することによって指定されたWEBサーバにPOSTする処理が走る。

ひとまずひと通りの機能が完成したところで、どうにかしたい問題が出てきた。
送信ボタンを押下した際、実行したユーザは、単純なページ遷移だとすべての処理が終わるまで待たされ、その間の実行ログを見ることはできない。
複数のWEBサーバがあるので、時間もかかるし、現在どのサーバに向けて配信しているのか、終わってみるまでわからないのだ。
これをリアルタイムに見られるようになれば、ユーザビリティも向上するに違いない。

そういった経緯で、Ajaxに初めて手を出してみようと思ったワケなのだが、ちょっとだけハマってしまった。
Ajaxって、結局Javascriptなので、Javascriptでできないことは、当然にできない。
実は、どうやっても相手サーバにPOSTできないという問題が出てきたのだ。
IEとFFでは挙動が違って、IEではターゲットとなるレシーバではなく、WEBサーバのルートにあるTOPページのHTMLをレスポンスとして返してきてしまう。FFでは、まったくレスポンスが返ってこない。
相手サーバとの通信にはXMLHttpRequestを使うのだが、このオブジェクトの制約をあとから見つけて、ようやく原因がわかった。
このオブジェクト、ブラウザによっては他ドメインにアクセスできないらしい。セキュリティのためとか何とか。まぁ、そういう制約なら致し方ないのだが、回避策を見つけなければならない。

結局採用した回避策とは、センダと同一サーバ内に、受け取ったデータをそのままレシーバに投げて、レスポンスをそのまま返すという中継地点のPHPを置くことだった。
いまいちスマートでは無いような気もするし、一般的な方法なのかもわからない。
けど、この方法でうまくいったので、これで良しとするしかないな。
もし他に良い方法があったら、教えて欲しいけど…