Bekerja dengan permintaan dan tanggapan - Amazon CloudFront

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:

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:

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 adalah text dan base64. Jika Anda memasukkan body dalam response objek tetapi dihilangkanbodyEncoding, CloudFront perlakukan tubuh sebagai teks.

Jika Anda menentukan bodyEncoding sebagai base64 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"] atau headers["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:

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:

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.