View a markdown version of this page

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 tanggapan 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 saat CloudFront peristiwa yang terjadi:

Peristiwa permintaan penampil

Ketika fungsi dipicu oleh peristiwa permintaan penampil, CloudFront mengembalikan respons ke penampil dan tidak menyimpannya.

Acara permintaan asal

Ketika fungsi dipicu oleh peristiwa permintaan asal CloudFront , periksa cache tepi untuk respon yang sebelumnya dihasilkan oleh fungsi.

  • Jika respons ada di cache, fungsi tidak dijalankan dan CloudFront mengembalikan respons yang di-cache ke penampil.

  • Jika respons tidak ada dalam cache, fungsi akan dijalankan, CloudFront mengembalikan respons ke penampil, dan juga menyimpan datanya.

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 dalam 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 menyertakan body dalam response objek tetapi menghilangkanbodyEncoding, per CloudFront lakukan tubuh sebagai teks.

Jika Anda menentukan bodyEncoding sebagai base64 tetapi bagian tubuh tidak valid dasar64, CloudFront mengembalikan kesalahan.

headers

Header yang CloudFront ingin Anda kembalikan dalam respons yang dihasilkan. Perhatikan hal-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 memformat nama header, kunci header yang dimasukkan 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 berikut:

  • Kembalikan dalam respons

  • Cache di cache CloudFront tepi, ketika respons dihasilkan oleh fungsi yang dipicu oleh peristiwa permintaan asal

  • Masuk CloudFront Log akses (log standar)

Jika status nilainya tidak antara 200 dan 599, CloudFront mengembalikan kesalahan ke penampil.

statusDescription

Deskripsi yang CloudFront ingin Anda kembalikan dalam respons, untuk menyertakan kode status HTTP. Anda tidak perlu menggunakan deskripsi standar, seperti OK untuk kode status HTTP sebesar 200. Memperbarui bidang ini hanya akan berfungsi jika klien terhubung HTTP/1.1. Jika klien terhubungHTTP/2, setiap perubahan pada klien statusDescription akan diabaikan dan deskripsi standar akan dikembalikan ke klien.

Kesalahan

Berikut ini adalah kemungkinan kesalahan untuk respons HTTP yang dihasilkan.

Respon Berisi Badan dan Menentukan 204 (Tanpa 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 Respon 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 dalam pemicu respons asal

Saat CloudFront menerima respons HTTP dari server asal, jika ada pemicu respon 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 tanggapan HTTP dalam pemicu permintaan.

Saat Anda bekerja dengan respons HTTP, Lambda @Edge tidak mengekspos tubuh yang dikembalikan oleh server asal ke pemicu respon 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 tubuh dalam fungsi Anda, badan asli yang dikembalikan oleh server asal dikembalikan kembali 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 baca-saja, atau Anda dapat menentukan bahwa Anda akan mengganti bodinya.

Untuk mengaktifkan opsi ini, pilih Sertakan Tubuh saat membuat CloudFront untuk fungsi Anda yang digunakan untuk permintaan pemirsa atau acara 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.