Latar Belakang
Saya hosting situs statis di S3, dengan CloudFront di atasnya. Masalah yang saya miliki adalah dengan file HTML saya.
Menurut FAQ CloudFront :
Amazon CloudFront menggunakan tajuk kontrol cache ini untuk menentukan seberapa sering perlu memeriksa asal untuk versi yang diperbarui dari file itu
Apa yang telah saya lakukan sejauh ini
Dengan mengingat hal ini, saya telah mengatur file HTML di S3 Bucket saya untuk menambahkan header berikut:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Pada panggilan pertama saya ke saya samplefile.htm
, saya melihat tajuk respons berikut (saya sudah mengecualikan tajuk yang jelas (misalnya Content-Type
) untuk tetap pada intinya:
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Date:Sat, 10 Dec 2011 14:16:51 GMT
ETag:"a5890ace30a3e84d9118196c161aeec2"
Expires:Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified:Sat, 10 Dec 2011 14:16:43 GMT
Server:AmazonS3
X-Cache:Miss from cloudfront
Seperti yang Anda lihat, Cache-Control
tajuk saya ada di sana. Masalahnya adalah, jika saya memperbarui file ini dan menyegarkan saya mendapatkan konten yang di-cache (daripada file terbaru), dan saya bisa melihat bahwa CloudFront melayani versi yang di-cache dengan melihat header respons:
X-Cache:Hit from cloudfront
Ringkasan / pertanyaan
Dengan pemikiran di atas, bagaimana saya dapat mencapai pengambilan otomatis HTML terbaru saat menggunakan CloudFront?
Sesuai dengan FAQ-nya, saya seharusnya bisa melakukan ini dengan header Cache-Control, tapi sepertinya saya tidak bisa membuatnya berfungsi.
Ikuti jawaban di bawah ini
Pada akhirnya saya memutuskan untuk mengubah www CNAME saya untuk menunjuk ke ember S3 saya secara langsung. Kemudian menambahkan CNAME baru yang disebut "statis", yang menunjuk ke CloudFront.
Ini berarti bahwa HTML adalah langsung dari S3, yang kemudian memiliki semua referensi CSS / JS / IMG yang menunjuk ke static.mydomain.com
sumber
The minimum expiration time CloudFront supports is 0 seconds for web distributions and 3600 seconds for RTMP distributions.
docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…Saya percaya jawaban sejauh ini, sementara benar pada saat itu, sekarang kedaluwarsa, karena Cloudfront sekarang mendukung TTL minimum 0, dan upaya asli OP untuk menggunakan cache-age = 0 sekarang harus bekerja.
Anda ingin melihat apakah akan menggunakan header kontrol-cache lainnya, dalam hal apakah mereka akan menghasilkan hasil yang Anda cari - Anda mungkin hanya perlu usia maksimal. Apa yang mungkin Anda inginkan adalah Cloudfront untuk memeriksa S3 untuk melihat apakah file HTML telah berubah. Jika sudah, Cloudfront dapat mengambil dan mengembalikan file baru. Jika tidak, ia dapat melayani klien dari cache yang ada (menghemat bandwidth S3, dan melayani klien lebih cepat, dan lebih lokal).
Maksud Cloudfront adalah untuk menyajikan konten yang di-cache, ya, tapi sekarang ini termasuk konten yang terkadang berubah, tetapi dapat di-cache jika belum diubah.
Ps string query juga berfungsi dengan Cloudfront sekarang (jika Anda mengkonfigurasi 'perilaku' untuk asal yang relevan - fitur baru lainnya), namun beberapa proxy mungkin masih gagal untuk men-cache file apa pun dengan string query.
Panduan Pengembang Amazon: Kedaluwarsa 1
sumber
Tidak yakin bagaimana CloudFront memperlakukan tajuk seperti yang Anda miliki, tetapi jika Anda tidak menentukan tajuk, waktu default untuk menyegarkan objek adalah 24 jam.
Salah satu hal yang dapat Anda lakukan untuk menyegarkan objek adalah Memvalidasi konten. Lihat tautan di bawah ini untuk info lebih lanjut. http://blog.cloudberrylab.com/2010/08/how-to-manage-cloudfront-object.html
sumber