2016-10-12 7 views
0

私は2つのファイルを持っているとしましょう:1つはサファリ用、もう1つはFirefox用です。AWS S3またはクラウドフロントで基本ロジックを追加する方法は?

User-Agentに基づいてUser-Agentと返されたファイルをチェックしたいと思います。

外部サーバーを追加しないでこれを行うにはどうすればよいですか?

+0

どのようなファイルですか? –

+0

たとえば、2つのCSSファイル。または2つの画像 – moeseth

答えて

0

余分なサーバーを追加しないとこれを行うことはできません。

S3は静的コンテンツをサポートしています。 ¹は要求ヘッダーに基づいて応答を変更しません。

CloudFrontは、コンテンツがリクエストヘッダーに基づいて異なる必要がある場合は、オリジンサーバーを使用します。デフォルトでは、CloudFrontはほとんどのヘッダーを原点に転送しませんが、これはキャッシュ動作設定で変更できます。 User-Agentヘッダーを原点に転送すると、CloudFrontには選択肢がないため、ユーザーエージェント文字列内のすべての変更が応答の変更を引き起こす可能性があると仮定するため、キャッシュヒット率が大幅に低下します。特定のユーザエージェントストリングによって要求されたものは、同一のユーザエージェントストリングを有する将来のブラウザにのみ供給される。それはそれぞれ異なるコピーをキャッシュしますが、これはあなたのヒット率を依然として損ねます。ブラウザの一般的なタイプのみを知りたい場合、CloudFrontは、ユーザーエージェント文字列を実際に転送せずに同じ悪影響を及ぼすことなく、ユーザーエージェントがデスクトップ、スマートテレビ、モバイル、タブレットのいずれであるかを、キャッシュのヒット率。

CloudFront は、それぞれ固有のユーザーエージェントの適切なバージョンのページをに正しくキャッシュしますが、オリジンサーバーは実際のコンテンツ選択ロジックを実装する必要があります。そして、起源がS3の場合、CloudFrontとS3の間にサーバーがない限り、これはサポートされません。これは完全に有効な設定です.S3にリクエストを送信する前にCloudFrontから受け取ったリクエストパスを書き換えてから、S3からCloudFrontにコンテンツを戻し、コンテンツをブラウザに返すサーバーで、このような設定ができます。

AWS Lambdaは、CloudFrontとS3の間に必要なサーバー(サーバーならではのサーバー)として機能する、このようなアプリケーションの候補になる可能性がありますが、まだバイナリデータをサポートしていないためテキストではなく、それはオプションでもありません。


¹少なくとも、ここでは関連性はありません。限定された要求ヘッダーのサブセットに基づいてアクセスが許可または拒否される場合、CORSの例外が存在します。

+0

だから、何が良いでしょうか? ec2のパスを書き直すか、S3からデータを取り出してec2からクラウドフロントに送信しますか?もしそうなら、クラウドフロントはデータをどのようにキャッシュしますか?同じURLであっても、User-Agentに基づいてレスポンスが異なるため、 – moeseth

+0

'User-Agent'ヘッダをオリジンに転送するようにCloudFrontを設定すると、自動的に異なるバージョンのページがキャッシュされ、まったく同じユーザエージェント文字列を持つ将来のリクエスタに返されます。 "どちらが良いですか?"それらは同じことを言っているだけの2つの方法です。私が「パスを書き換える」と言うとき、私はブラウザをリダイレクトするという意味ではありません。私は、S3から提供したい実際のオブジェクトをフェッチするように、ブラウザが要求したものから、ブラウザが要求したものと異なる場合に、パスを変更することを意味します。 '/ index.html'を'/index.firefox.html'に変更してください。 –

関連する問題