問題タブ [aws-lambda-edge]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
amazon-s3 - Lambda@Edge Cache-Control ヘッダーが存在しない Cloudfront
S3に保存された画像と、その場でサイズを変更するラムダ関数があります。それをしている間CacheControl: 'max-age=31536000'
、サイズ変更された画像に追加し、Cache-Control ヘッダーも追加します。
サムネイルが既に生成されている場合は、次のようにします。
Cloudfront ディストリビューションでは、次の設定をしています。
- 選択したリクエスト ヘッダーに基づくキャッシュ: なし
- オブジェクトのキャッシュ: オリジン キャッシュ ヘッダーを使用する
ラムダは正常に動作しますが、devtools を見ると、Chrome が画像をキャッシュしていないようです。ここに私が得る情報があります:
Control-Cache が存在しないため、これを理解できません...
ディストリビューション内のすべてのイメージを無効にすると、唯一の変更は x-cache: 'Error from cloudfront' の最初のロード時の値です (ステータス 200 で、イメージは正常にロードされます)。
aws-lambda - Lamda@edge クライアント レスポンスがクライアント スクリプトに情報を返す
クライアント レスポンスで Lambda@edge が動作しています。クライアントに渡す必要がある小さなデータがあります。
応答本文は変更できません。Client Request ラムダでカスタム応答を作成しなくても、別の方法でこのデータを取得できるかどうかを確認したいと考えています。この情報は、返された応答で既存の JavaScript 関数によって消費されます。その JavaScript 関数は、必要に応じて変更できます。
応答のヘッダーは、そのページの JavaScript で読み取ることができないため、その多くはフラットです。サーバーの処理と応答が重すぎるため (従来のアプリでは非常にひどい)、これらのヘッダーを輝かせるためだけにページに 2 番目の非同期要求を作成するのは快適ではありません。
クライアント応答ラムダの応答オブジェクトに、応答に設定してページで準備できるものはありますか?
amazon-s3 - 「--compress」フラグを使用した場合と使用しない場合で、curl 呼び出し間でキャッシュ制御値が異なるのはなぜですか?
Cloudfront/S3 とそれらが何をしているのかは言うまでもなく、ヘッダー、キャッシング、カール全般について非常に暫定的な理解があります。
現在、cache-control max-age 値を設定するための originResponse を持つ Lambda Edge スクリプトがあります。content-type のケースを含むスイッチを使用して、それに基づいて異なる値を割り当て、すべてのケースが見つからない場合はデフォルトを割り当てます。
コンテンツを試してみるcurl -I
と、予想される最大年齢で返されますが、ブラウザーを使用するcurl -I --compressed
か、ブラウザーから調べると、代わりにすべての設定がスイッチのデフォルト値に表示されます。
それが圧縮に関連していることは理解していると思いますが、それは私の限りであり、そうでなければこれに対処する方法について完全に迷っています。
リクエスト ヘッダーにはaccept-encoding: gzip, ...
がありますが、どのコンテンツにも のレスポンス ヘッダーはありませんcontent-encoding: gzip
。Cloudfront が適切な場合にそのヘッダー自体を自動的に設定するかどうかはわかりません — もしそうなら、gzip 以外の別の形式でコンテンツを「圧縮」できますか? content-encoding
ヘッダーがないと奇妙になりますか? これは私の問題にも関係していますか?
今のところ、この質問の意味がほとんどないことをもう一度お詫びしたい.
タイトルは本当に私の質問を簡潔にまとめたものです。--compressed
ない場合と同じ max-ageを表示する curl 呼び出しを行う方法を理解しようとしています。
編集:現在、S3(?)がMIMEコンテンツタイプをbinary/octet-stream
.woff2フォントなどに割り当てる問題もあり、私も取り組んでいます。これらの問題がどのように関連しているかはわかりません。また、タイプの再割り当てやオブジェクトの再構築 (それが問題である場合) がスイッチの失敗を引き起こしている可能性があるかどうかはわかりません。しかし、そうは言っても、元の質問のコンテンツタイプは期待どおりのものを示しているため、なぜデフォルトに達しているのかわかりません。
編集 2 :コメントでもう少しコンテキストを確認するために、最初にこの質問をredditに投稿しました。
amazon-web-services - AWS CloudFront であるドメインから別のドメインにリクエストを再ルーティングするにはどうすればよいですか?
ラムダ関数 (/getName など) があります。これは 1 つのドメイン (例: A) によってホストされ、複数のドメイン (A、B、C など) によってトリガーされる可能性があります。ドメイン B からの /getName へのリクエストが、ブラウザーへの明示的なリダイレクト (301 を返す) なしでドメイン A に再ルーティングまたはリダイレクトされるように、CloudFront をセットアップする必要があります。
たとえば、ブラウザが www.B.com/getName に対して ajax 呼び出しを行う場合、内部的には www.A.com/getName への呼び出しである必要があります。www.A.com/getName への呼び出しは、クライアント/ブラウザーに表示されないようにする必要があります。
これは CloudFront で可能ですか? もしそうなら、これを設定する正しい方法は何ですか?