Saya telah menekan beberapa halaman di Google di mana Anda dapat mengatur Header di S3 untuk objek individual. Itu benar-benar bukan cara yang produktif untuk melakukannya secara khusus karena dalam kasus saya kita berbicara tentang beberapa objek.
Ya, "produktif" atau tidak, begitulah sebenarnya dirancang untuk bekerja.
CloudFront tidak menambahkan Cache-Control:
header.
CloudFront melewati-melalui (dan juga hal, kecuali dinyatakan dikonfigurasi) yang Cache-Control:
header yang disediakan oleh server asal, yang dalam hal ini adalah S3.
Untuk mendapatkan Cache-Control:
tajuk yang disediakan oleh S3 saat sebuah objek diambil, mereka harus disediakan saat objek diunggah ke dalam S3, atau ditambahkan ke metadata objek dengan operasi put + copy berikutnya, yang dapat digunakan untuk menyalin objek secara internal ke dalam dirinya sendiri di dalam S3, memodifikasi metadata dalam proses. Inilah yang dilakukan konsol, di balik layar, jika Anda mengedit objek metadata.
Ada juga (kalau-kalau Anda bertanya-tanya) tidak ada pengaturan global di S3 untuk memaksa semua objek dalam ember untuk mengembalikan header ini - itu adalah atribut per objek.
Pembaruan: Lambda @ Edge adalah fitur baru di CloudFront yang memungkinkan Anda untuk mengaktifkan pemicu terhadap permintaan dan / atau tanggapan, antara penampil dan cache dan / atau cache dan asal, menjalankan kode yang ditulis dalam Node.js terhadap struktur objek permintaan / respons yang sederhana diekspos oleh CloudFront.
Salah satu aplikasi utama untuk fitur ini adalah memanipulasi header ... jadi sementara di atas masih akurat - CloudFront sendiri tidak menambahkan Cache-Control
- sekarang mungkin untuk fungsi Lambda untuk menambahkannya ke respons yang dikembalikan dari CloudFront.
Contoh ini Cache-Control: public, max-age=86400
hanya akan ditambahkan jika tidak ada Cache-Control
tajuk yang sudah ada pada respons.
Menggunakan kode ini dalam pemicu Respons Asal akan menyebabkannya menyala setiap kali CloudFront mengambil objek dari asal, dan memodifikasi respons sebelum CloudFront menyimpannya.
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
if(!response.headers['cache-control'])
{
response.headers['cache-control'] = [{
key: 'Cache-Control',
value: 'public, max-age=86400'
}];
}
callback(null, response);
};
Pembaruan (2018-06-20): Baru-baru ini, saya mengirimkan permintaan fitur ke tim CloudFront untuk memungkinkan konfigurasi header respons asal statis sebagai atribut asal, mirip dengan cara header permintaan statis dapat ditambahkan, sekarang ... tetapi dengan twist, memungkinkan setiap header dikonfigurasikan untuk ditambahkan secara kondisional (hanya jika asal tidak memberikan header itu dalam respons) atau tanpa syarat (menambahkan header dan menimpa header dari asal kemudian, jika ada).
Dengan permintaan fitur, Anda biasanya tidak menerima konfirmasi apakah mereka benar-benar mempertimbangkan untuk mengimplementasikan fitur baru ... atau bahkan apakah mereka mungkin sudah mengerjakannya ... itu baru diumumkan ketika sudah selesai. Jadi, saya tidak tahu apakah ini akan dilaksanakan. Ada argumen yang harus dibuat bahwa karena kemampuan ini sudah tersedia melalui Lambda @ Edge, tidak perlu untuk itu dalam fungsionalitas basis ... tetapi argumen kontra saya adalah bahwa basis fungsional tidak melengkapi fitur tanpa kemampuan untuk lakukan manipulasi header respons statis yang sederhana, dan bahwa jika ini adalah satu-satunya alasan pemicu diperlukan, maka diperlukan pemicu Lambda adalah biaya yang tidak perlu, secara finansial dan dalam latensi tambahan (walaupun keduanya tidak selalu merupakan biaya aneh).