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 respons HTTP dalam pemicu permintaan

Saat CloudFront menerima permintaan, Anda dapat menggunakan fungsi Lambda untuk menghasilkan respons HTTP yang CloudFront kembali langsung ke penampil tanpa meneruskan respons ke asal. Membuat respons HTTP mengurangi beban pada asal mula, dan biasanya juga mengurangi latensi bagi penampil.

Beberapa skenario umum untuk menghasilkan tanggapan HTTP mencakup hal 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 mengautentikasi

Fungsi Lambda @Edge dapat menghasilkan respons HTTP 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 kode sampel untuk menghasilkan respons HTTP, lihat Lambda @Edge contoh fungsi. Anda juga dapat mengganti respons HTTP dalam pemicu respons. Untuk informasi selengkapnya, lihat Perbarui tanggapan HTTP di pemicu respons asal.

Model pemrograman

Bagian ini menjelaskan model pemrograman untuk menggunakan Lambda@Edge untuk menghasilkan respons HTTP.

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 nama header HTTP 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 judul yang peka terhadap kasus sebagaimana muncul dalam permintaan HTTP; 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 status HTTP. 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 status HTTP. Anda tidak perlu menggunakan deskripsi standar, seperti OK untuk kode status HTTP sebesar 200.

Kesalahan

Berikut ini adalah kemungkinan kesalahan untuk respons HTTP 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 mengenakan pembatasan opsional yang ditemukan dalam RFC 2616, yang menyatakan bahwa HTTP 204 respons tidak harus berisi isi 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 wajib

status bidang wajib diisi.

Semua kolom lain bersifat opsional.

Perbarui tanggapan HTTP di pemicu respons asal

Saat CloudFront menerima respons HTTP dari server asal, jika ada pemicu respons asal yang terkait dengan perilaku cache, Anda dapat memodifikasi respons HTTP untuk mengganti apa yang dikembalikan dari asal.

Beberapa skenario umum untuk memperbarui respons HTTP mencakup hal berikut:

catatan

Fungsi harus mengembalikan nilai status antara 200 dan 599 (inklusif), jika tidak CloudFront mengembalikan kesalahan ke penampil.

Anda juga dapat mengganti respons HTTP di penampil dan peristiwa permintaan asal. Untuk informasi selengkapnya, lihat Hasilkan respons HTTP dalam pemicu permintaan.

Saat Anda bekerja dengan respons HTTP, 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 untuk menggunakan Lambda@Edge mengekspos tubuh dalam permintaan metode HTTP yang dapat ditulis (POST, PUT, DELETE, dan seterusnya), sehingga Anda dapat mengaksesnya dalam fungsi Lambda Anda. Anda dapat memilih akses hanya-baca, atau Anda dapat menentukan bahwa Anda akan mengganti isi.

Untuk mengaktifkan opsi ini, pilih Sertakan Badan 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.