オフショアに作ってもらった、C/C++ベースでWebサービスを利用するモジュールをテストしていたら、さくさくと動いていたのだけれど、なぜか404 NOT FOUNDエラーが返ってくるようになった。そのWebサービスはRESTで、JSON形式でデータを渡してDB登録させるもの。
おかしいなー、と思っていろいろと試行錯誤した結果、JSON形式のデータにスラッシュ(/)が入っているとエラーとなることが判明。つまり、エンコードされた文字列に%2Fが入っているかたちです。
ググってみると、以下の記事が引っかかりました。
ApacheのAllowEncodedSlashesをOnにして、URLに「%2F(スラッシュ)」があっても404エラーにならないようにする。
Apacheではなかったのだけれど、サーバーの設定を見てもらうと、同じ設定があって、見事にOff。
うーん、サーバーの設定漏れか、と思ったのだが、どうも違うらしい。
同じサーバーに対して、別のWebサービスでスラッシュを入れて、別の.NETモジュールからデータ登録してみたのだけれど、そちらはOK。何故だ。
よくよく聞くと、C/C++ベースでのモジュールではGETメソッドを使って投げているが、.NETモジュールはPOSTメソッドを使っているとのこと。
まあ、今回の場合、DB登録させるので、確かにRESTfulサービスとしては、POSTメソッドが正しい。つまり、AllowEncodedSlashesは、Offで合っている。(でも、Webサービス作った人間に聞いたら、GET/POSTどちらでも良い(正しいRESTfulサービスにはなっていない)と言っていたのだが。。。)。
考えられる対処方法は2つ。
・C/C++モジュールを作り直す
・AllowEncodedSlashesをOnにする
まずは素直に、前者にチャレンジすることにしよう。
0 件のコメント:
コメントを投稿