Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan permintaan dan tanggapan
Untuk menggunakan permintaan dan tanggapan Lambda @Edge, lihat topik berikut:
Topik
Gunakan fungsi Lambda @Edge dengan failover asal
Anda dapat menggunakan fungsi Lambda @Edge dengan CloudFront distribusi yang telah Anda atur dengan grup asal, misalnya, untuk failover asal yang Anda konfigurasikan untuk membantu memastikan ketersediaan tinggi. Untuk menggunakan fungsi Lambda dengan kelompok asal, tentukan fungsi dalam permintaan asal atau pemicu respons asal untuk kelompok asal saat Anda membuat perilaku cache.
Untuk informasi selengkapnya, lihat berikut ini:
-
Buat grup asal: Buat grup asal
-
Bagaimana asal failover bekerja dengan Lambda@Edge: Gunakan failover asal dengan fungsi Lambda@Edge
Hasilkan HTTP tanggapan dalam pemicu permintaan
Saat CloudFront menerima permintaan, Anda dapat menggunakan fungsi Lambda untuk menghasilkan HTTP respons yang CloudFront kembali langsung ke penampil tanpa meneruskan respons ke asal. Menghasilkan HTTP respons mengurangi beban pada asal, dan biasanya juga mengurangi latensi untuk pemirsa.
Beberapa skenario umum untuk menghasilkan HTTP tanggapan meliputi yang berikut:
-
Mengembalikan halaman web kecil ke penampil
-
Mengembalikan kode status HTTP 301 atau 302 untuk mengarahkan pengguna ke halaman web lain
-
Mengembalikan kode status HTTP 401 ke penampil saat pengguna belum diautentikasi
Fungsi Lambda @Edge dapat menghasilkan HTTP respons ketika CloudFront peristiwa berikut terjadi:
- Peristiwa permintaan penampil
-
Saat fungsi dipicu oleh peristiwa permintaan penampil, CloudFront mengembalikan respons ke penampil dan tidak menyimpannya di cache.
- Acara permintaan asal
-
Saat fungsi dipicu oleh peristiwa permintaan asal, CloudFront periksa cache tepi untuk respons yang sebelumnya dihasilkan oleh fungsi tersebut.
-
Jika respons ada di cache, fungsi tidak dijalankan dan CloudFront mengembalikan respons cache ke penampil.
-
Jika respons tidak ada dalam cache, fungsi dijalankan, CloudFront mengembalikan respons ke penampil, dan juga menyimpannya di cache.
-
Untuk melihat beberapa contoh kode untuk menghasilkan HTTP tanggapan, lihatLambda @Edge contoh fungsi. Anda juga dapat mengganti HTTP respons dalam pemicu respons. Untuk informasi selengkapnya, lihat Perbarui HTTP tanggapan dalam pemicu respons asal.
Model pemrograman
Bagian ini menjelaskan model pemrograman untuk menggunakan Lambda @Edge untuk menghasilkan HTTP tanggapan.
Objek respons
Tanggapan yang Anda kembalikan sebagai result
parameter dari callback
harus memiliki struktur berikut (perhatikan bahwa hanya status
bidang wajib diisi).
const response = { body: 'content', bodyEncoding: 'text' | 'base64', headers: { 'header name in lowercase': [{ key: 'header name in standard case', value: 'header value' }], ... }, status: 'HTTP status code (string)', statusDescription: 'status description' };
Objek respons dapat mencakup nilai-nilai berikut:
body
-
Tubuh, jika ada, yang CloudFront ingin Anda kembalikan dalam respons yang dihasilkan.
bodyEncoding
-
Pengodean untuk nilai yang Anda tentukan dalam
body
. Satu-satunya pengodean yang valid adalahtext
danbase64
. Jika Anda memasukkanbody
dalamresponse
objek tetapi dihilangkanbodyEncoding
, CloudFront perlakukan tubuh sebagai teks.Jika Anda menentukan
bodyEncoding
sebagaibase64
tetapi tubuh tidak valid base64, CloudFront mengembalikan kesalahan. headers
-
Header yang CloudFront ingin Anda kembalikan dalam respons yang dihasilkan. Perhatikan hal berikut:
-
Kunci dalam
headers
objek adalah versi huruf kecil dari nama HTTP header standar. Menggunakan tombol huruf kecil memberi Anda akses huruf kecil ke nilai header. -
Setiap header (misalnya,
headers["accept"]
atauheaders["host"]
) adalah serangkaian pasangan kunci. Untuk header tertentu, larik berisi satu pasangan nilai kunci untuk setiap nilai dalam respons yang dihasilkan. -
key
(opsional) adalah nama header yang peka huruf besar/kecil seperti yang muncul dalam HTTP permintaan; misalnya,accept
atau.host
-
Tentukan
value
sebagai nilai header. -
Jika Anda tidak menyertakan bagian kunci header dari pasangan nilai kunci, Lambda@Edge secara otomatis memasukkan kunci header menggunakan nama header yang Anda berikan. Terlepas dari bagaimana Anda telah memformat nama header, kunci header yang disisipkan secara otomatis diformat dengan kapitalisasi awal untuk setiap bagian, dipisahkan oleh tanda hubung (-).
Misalnya, Anda dapat menambahkan header seperti berikut, tanpa tombol header:
'content-type': [{ value: 'text/html;charset=UTF-8' }]
Dalam contoh ini, Lambda@Edge membuat tombol header berikut:
Content-Type
.
Untuk informasi tentang pembatasan penggunaan header, lihat Pembatasan pada fungsi edge.
-
status
-
Kode HTTP status. Berikan kode status sebagai string. CloudFront menggunakan kode status yang disediakan untuk hal-hal berikut:
-
Kembalikan dalam respons
-
Cache di cache CloudFront tepi, ketika respons dihasilkan oleh fungsi yang dipicu oleh peristiwa permintaan asal
-
Masuk CloudFront Konfigurasikan dan gunakan log standar (log akses)
Jika
status
nilainya tidak antara 200 dan 599, CloudFront mengembalikan kesalahan ke penampil. -
statusDescription
-
Deskripsi yang CloudFront ingin Anda kembalikan dalam respons, untuk menyertai kode HTTP status. Anda tidak perlu menggunakan deskripsi standar, seperti
OK
untuk kode HTTP status 200.
Kesalahan
Berikut ini adalah kemungkinan kesalahan untuk HTTP tanggapan yang dihasilkan.
Respon Berisi Tubuh dan Menentukan 204 (Tidak Ada Konten) untuk Status
-
Ketika fungsi dipicu oleh permintaan penampil, CloudFront mengembalikan kode status HTTP 502 (Bad Gateway) ke penampil ketika kedua hal berikut ini benar:
-
Nilai dari
status
adalah 204 (Tidak Ada Konten) -
Jawaban mencakup nilai untuk
body
Ini karena Lambda @Edge memberlakukan pembatasan opsional yang ditemukan di RFC 2616, yang menyatakan bahwa
HTTP 204
respons tidak perlu berisi badan pesan. -
Pembatasan Ukuran Respons yang Dihasilkan
-
Ukuran maksimum respons yang dihasilkan oleh fungsi Lambda tergantung pada peristiwa yang memicu fungsi:
-
Peristiwa permintaan penampil – 40 KB
-
Acara permintaan asal – 1 MB
Jika respons lebih besar dari ukuran yang diizinkan, CloudFront mengembalikan kode status HTTP 502 (Bad Gateway) ke penampil.
-
Bidang yang diperlukan
status
bidang wajib diisi.
Semua kolom lain bersifat opsional.
Perbarui HTTP tanggapan dalam pemicu respons asal
Saat CloudFront menerima HTTP respons dari server asal, jika ada pemicu respons asal yang terkait dengan perilaku cache, Anda dapat memodifikasi HTTP respons untuk mengganti apa yang dikembalikan dari asal.
Beberapa skenario umum untuk memperbarui HTTP tanggapan termasuk yang berikut:
-
Mengubah status untuk menyetel kode status HTTP 200 dan membuat konten badan statis untuk kembali ke penampil saat asal mengembalikan kode status kesalahan (4xx atau 5xx). Untuk kode sampel, lihat Contoh: Gunakan pemicu respons asal untuk memperbarui kode status kesalahan ke 200.
-
Mengubah status untuk menetapkan kode status HTTP 301 atau HTTP 302, untuk mengarahkan pengguna ke situs web lain ketika asal mengembalikan kode status kesalahan (4xx atau 5xx). Untuk kode sampel, lihat Contoh: Gunakan pemicu respons asal untuk memperbarui kode status kesalahan ke 302.
catatan
Fungsi harus mengembalikan nilai status antara 200
dan 599
(inklusif), jika tidak CloudFront mengembalikan kesalahan ke penampil.
Anda juga dapat mengganti HTTP tanggapan di acara permintaan penampil dan asal. Untuk informasi selengkapnya, lihat Hasilkan HTTP tanggapan dalam pemicu permintaan.
Saat Anda bekerja dengan HTTP respons, Lambda @Edge tidak mengekspos badan yang dikembalikan oleh server asal ke pemicu respons asal. Anda dapat membuat badan konten statis dengan mengaturnya ke nilai yang diinginkan, atau menghapus tubuh di dalam fungsi dengan mengatur nilai yang akan kosong. Jika Anda tidak memperbarui bidang isi dalam fungsi Anda, badan asli yang dikembalikan oleh server asal dikembalikan ke penampil.
Akses badan permintaan dengan memilih opsi include body
Anda dapat memilih agar Lambda @Edge mengekspos isi dalam permintaan HTTP metode yang dapat ditulis (POST,,, dan sebagainya) PUTDELETE, sehingga Anda dapat mengaksesnya di fungsi Lambda Anda. Anda dapat memilih akses hanya-baca, atau Anda dapat menentukan bahwa Anda akan mengganti isi.
Untuk mengaktifkan opsi ini, pilih Sertakan Tubuh saat Anda membuat CloudFront pemicu untuk fungsi yang ditujukan untuk permintaan penampil atau peristiwa permintaan asal. Untuk informasi lebih lanjut, lihat Tambahkan pemicu untuk fungsi Lambda @Edge, atau untuk mempelajari penggunaan Sertakan Tubuh dengan fungsi Anda, lihat Struktur acara Lambda @Edge.
Skenario saat Anda mungkin ingin menggunakan fitur ini meliputi hal berikut:
-
Memproses formulir web, seperti formulir “hubungi kami”, tanpa mengirim data input pelanggan kembali ke server asal.
-
Mengumpulkan data beacon web yang dikirim oleh browser penampil dan memprosesnya di tepi.
Untuk kode sampel, lihat Lambda @Edge contoh fungsi.
catatan
Jika badan permintaan berukuran besar, Lambda@Edge akan memotongnya. Untuk informasi terperinci tentang ukuran dan pemotongan maksimum, lihat Pembatasan pada isi permintaan dengan opsi sertakan isi.