2014年7月29日火曜日

スラッシュ(%2F)を含むURLがNOT FOUNDでエラーとなる

オフショアに作ってもらった、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 件のコメント:

コメントを投稿