Home > Ruby on Rails > Apache(mod_rails)とmongrelでHTTPレスポンスヘッダに特定の値を返す

Apache(mod_rails)とmongrelでHTTPレスポンスヘッダに特定の値を返す

Photo by icanteachyouhowtodoit

レスポンスコードでステータスを判断するとFreeSpotとかで問題にならない?からの続き。

 ステータスコードで200が帰ってきたときに、ほんとに自分が通信したいサーバから帰ってきたかを検証する方法を考えてみました。

 ほんとに相手のサーバを認証したい場合はSSLを使うべきですが、そんなに大事にしたくない場合は、HTTPレスポンスヘッダに特定の値をセットすることで、相手を特定できるのではないかと思います。

 Railsのbefore_filterなどでresponse.headersをセットしてもいいのですが、これだとcacheに入った場合など、Railsを通らないときには、ヘッダが追加されません。
そのため、mod_railsの場合はApacheで、mongrelの場合はmogrel内でヘッダにセットする必要があります。

 Apacheでは、Headerディレクティブでヘッダを書き換える事ができます。これを使う場合にはmod_headersを有効にしてください。

<VirtualHost *>
....
  Header set X-AppName sticka
</VirtualHost>

 mongrelの場合には、config/environment.rbに下記のコードを追加します。

if defined?(Mongrel) && defined?(Mongrel::Rails)
  class Mongrel::Rails::RailsHandler
    alias process_without_appname process
    def process(request, response)
      response.header['X-AppName'] = 'sticka'
      process_without_appname(request, response)
    end
  end
end

 これで、開発で使っているmongrelでも、実環境のApacheでもHTTPレスポンスヘッダのX-AppNameにはstickaが設定されます。

 外部からAPIをアクセスする際には、X-AppNameを検証することで、プロキシなどによって勝手にリダイレクトなどをされても、それを検出することができます。

Related posts

masuidrive(増井 雄一郎)
PukiWikiなどのオープンソース活動を経て、2005年からRuby on Railsに的を絞り、WEB2.0社PingKingやニフティ社アバウトミーの開発に関わる。これまでのフリー活動から転身し、2007年は1年だけ会社員として働いた後、起業のため渡米。2008年4月にBig Canvas Inc.設立、iPhoneアプリなどの開発を行う。2009年11月に退社し、現在、米Appcelerator社のテクニカルエバンジェリスト。
Twitterは、@masuidrive

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://blog.masuidrive.jp/index.php/2008/04/15/set-http-response-header/trackback/
Listed below are links to weblogs that reference
Apache(mod_rails)とmongrelでHTTPレスポンスヘッダに特定の値を返す from @masuidrive blog

Home > Ruby on Rails > Apache(mod_rails)とmongrelでHTTPレスポンスヘッダに特定の値を返す

Search
Feeds
Meta

Return to page top