PIYO - Tech & Life -

ブラウザからPATCHメソッドのリクエストが飛ばないときは

Web IE

tl;dr

プロキシサーバーでPATCHがブロックされているかもしれないから、PUTに切り替えたら動いたよ。

経緯

仕事で開発しているRailsアプリケーションでのできごとです。あるお客さんの社内のPCのIEから、あるデータを一部修正するするためのボタンが動かない、という連絡をもらいました。ユーザーのステータスを更新する機能のようなものというイメージを持ってもらえたらいいです。

この機能はボタンを押したらAjax的にリクエストを投げて戻ってきたら画面を更新するということをやっていました。最初はIEを疑いましたが、同様にAjaxな削除ボタンは動くらしくIEのせいではないことがわかりました

次に調べたのはRails側のログですが、該当のリクエストに相当するログが一切なかったのでサーバーにリクエストが到達していないことがわかりました。

いくつか似たような機能のうち動かないものを列挙してもらったところ、それらの共通点として全てがPATCHメソッドのリクエストを投げていることがわかりました。

Railsではリソースのupdateアクションに対応するメソッドはPUTまたはPATCHです。一部更新というような機能の際はPATCHを使うようにしていました。

この辺の話題は同僚の@tkawaさんがだいぶ前に書いてくれてます。

http://d.hatena.ne.jp/tkawa/20120325/p1

まずは一箇所だけPATCH→PUTと変更してみたところ、該当部分が動くようになったことがわかり、やはりPATCHが原因だったことがわかりました。

どうやらそのPCは外部へのアクセスが厳し目の設定になっているらしいです。原因が完全にはわかっていないものの、プロキシサーバーあたりが怪しいと推測するに至りました。

結論

環境によってはPATCHを使わないほうが良い。