1

ActiveResource を使用して相互に通信する Rails アプリケーションがあります。すべての HTTP リクエストを HTTPS にリダイレクトするように VHOST をセットアップしました。これは、1 つのアプリケーションの VHOST です。

<VirtualHost *.80>
 <Location />
    Redirect permanent / https://my.app.com/
 </Location>
</VirtualHost>

#http requests will forwarded here by the above Redirect
<VirtualHost *.443>

 ....
</VirtualHost>

これは、ブラウザからアクセスすると find をリダイレクトしますが、ActiveResource を介して HTTP リクエストを送信すると、エラー: Moved Permanently が返されます。上記のセットアップでこれが発生する可能性があることは理解していますが、この状況に対処し、HTTP にリクエストを送信しても ActiveResource を機能させるにはどうすればよいですか (HTTPS に転送する必要があります)。

ありがとう、

イムラン

4

2 に答える 2

1

私はこれが機能することを検証していませんが、ActiveResource API とクイック Google 検索を読んで、おそらく例外をキャッチし、リクエストがリダイレクトされた場所を取得してから、新しい場所を使用して操作を再試行できますか?

     rescue ActiveResource::Redirection => ex
        unless retried
          domain = URI.parse(ex.response['Location']).host
          retried = true and retry # retry operation
        end
      end
于 2010-12-21T16:06:05.287 に答える
1

HTTP 仕様によると、自動的にリダイレクトされるのはGETおよびリクエストのみであるため、Rails が ActiveResource 呼び出しを自動的にリダイレクトする方法はありません。HEAD

したがって、サーバーからのリダイレクトによってActiveResource::Redirection例外が発生するため、コードでこの例外を処理する必要があります。

begin
  # Make some ActiveResource calls
rescue ActiveResource::Redirection
  # Error handling
end

ブロック内で新しい HTTPS リクエストを作成することを試みることができますrescue(おそらくsite、ActiveResource モデルの属性を更新することによって)。ただし、すべての ActiveResource 操作でこの種のエラー処理が必要になるため、コードの読み取りと保守が難しくなります。

したがって、コードでリダイレクトを処理しようとするのではなく、アプリケーションに接続するすべてのクライアントが常に HTTPS バージョンを使用するように要求することをお勧めします。

于 2010-12-21T16:13:56.390 に答える