2016-08-19 11 views
0

私は2つのサーバー(両方とも公的にアクセス可能)を持っています。最初のものは画像保管サーバーです。 2つ目は、画像ストレージサーバ上の画像を指すリンク(node.jsで書かれた小さなスクリプト)を生成します。リバースプロキシとリダイレクトvsフェッチURL

画像保管サーバーから写真をロードする必要があるフロントエンドWebページがあります。これを行うには、リンクを取得するために「リンク生成」サーバーに連絡する必要があります。

私はこれを行うことを考えています3通りの方法があります。ブラウザがロードしようとしないように

  1. ストアdata-srcタグで画像IDデータ<img>の一部ではなく、srcタグとしては、イメージとして。次に、いくつかのjavascriptがイメージIDでリンク生成サーバーにpingを実行し、実際のイメージリンクを取得して、srcタグに配置します。

  2. リンクをテキストとして返すのではなく、適切な画像リンクにリダイレクトするようにして、画像IDを持つ画像生成サーバへのリンクをsrcタグに置くことができます。ブラウザは、リダイレクト。 (私はイメージがリダイレクトによって解決できると仮定していますか?)

  3. リバースプロキシにリバースプロキシを作成して、結果のイメージ自体をロードし、リンクをテキストとして返す代わりにイメージを返すようにします。同様に、画像IDを持つ画像生成サーバーへのリンクはsrcタグに配置され、画像を解決するために特別なJavaScriptは必要ありません。


私の質問は:は、画像の読み込み速度と、「キャッシュ・能力」の面で他よりも望ましいこれらのいずれかいますか?これまでは、リダイレクトメソッドがきれいで、特別なjavascriptを必要としないので、リダイレクトメソッドがより望ましいと思っています。しかし、このような方法では(ブラウザがリダイレクトを解決して最終的なイメージリンクを実際に取得するため、後でページを再ロードするために、最終イメージをブラウザにキャッシュできないでしょうか?

ありがとうございました!

答えて

0

イメージサーバーとリンクジェネレーターの両方を制御できると思われるので、それらを1つのWebサービスに結合することをお勧めします。基本的には、オプション3のように、リバースプロキシを使用するか、2つのサーバーアプリケーションを1つのアプリケーションに組み合わせるかによって、パフォーマンスが向上します(イメージ負荷あたり1つのHTTP要求が少なくなります)。これはより洗練されたソリューションです。クライアント/ブラウザでリダイレクトや複数のHTTPリクエストを必要とせずに、単一のシンプルなイメージWebサービスを作成することができます。

イメージについては、URLは可能ですが、リダイレクトによって解決できます。キャッシュヘッダーが正しい場合は、リダイレクトURLのイメージがブラウザによってキャッシュされます。 301リダイレクトは正しいキャッシュヘッダーでキャッシュ可能です。ここでも、このアプローチはサービスとして複雑に思われますが、最終的にはビジネスコストが決定する可能性があります。

要約すると、クライアント上でイメージサービスを正しく使用する負担がかかりますので、まとめて#1から離れています。あなたが#2か#3かどうかに関わらず、おそらく、即座の開発コストと、それを選択するための長期メンテナンスコストに依存しているはずです。

+0

興味深いことに、画像保管サービスはPythonで書かれており、リンク生成サービスはnode.jsにあります。私はそれらを別々にしておきたいと思う。リダイレクトとは逆のリバースプロキシを使用すると、パフォーマンス上のメリットが得られるのはなぜですか? 1日の終わりに、2つのhttpリクエストがいずれかの方法で行われています。クライアントとリンクジェネレータサーバ(リバースプロキシ)またはクライアントのいずれか(リダイレクト用)。 – abagshaw

+0

あなたは正しいです。私は、リバースプロキシを使用する代わりに、2つの画像アプリを1つのアプリに統合することを指していました。私はあなたが彼らを別々にしておきたいと思っています。ブラウザ・サーバーのHTTPリクエストは、通常、サーバー・サーバーのHTTPリクエストよりも遅いという点に関係なく、パフォーマンスについて考慮する必要があります。ブラウザは一般的にネットワーク接続が遅いため、通常は同じデータセンターでホストされている場合は、サーバーの接続が高速になります。 –

関連する問題