Pemicu HTTP memanggil fungsi melalui permintaan HTTP, yang berguna untuk membangun layanan web secara cepat. Sebelum menggunakan pemicu HTTP, tinjau batasannya serta batasan protokol HTTP/HTTPS yang didukung guna mencegah kesalahan fungsi akibat melebihi batas tersebut. Topik ini menjelaskan metode pemanggilan, autentikasi, dan penanganan permintaan lintas asal untuk pemicu HTTP.
Catatan Penggunaan
Jika pemicu HTTP Anda bersifat anonim karena Authentication Method-nya diatur ke No Authentication, verifikasi identitas tidak diperlukan. Artinya, siapa pun yang memiliki URL dapat mengirim permintaan HTTP untuk memanggil fungsi Anda, yang menimbulkan risiko keamanan. Untuk mengurangi risiko ini, Anda dapat mengautentikasi permintaan dengan memvalidasi bidang
Authorizationdalam header permintaan. Untuk informasi selengkapnya, lihat Konfigurasi autentikasi tanda tangan untuk pemicu HTTP.Sesuai dengan peraturan keamanan siber nasional, mulai 10 Juni 2024, pemicu HTTP yang baru dibuat dilarang mengunduh file APK (tipe MIME: application/vnd.android.package-archive) melalui titik akhir akses jaringan publik. Upaya mengunduh file APK akan mengembalikan kode kesalahan 400. Untuk informasi selengkapnya, lihat Cara memastikan bahwa titik akhir publik pemicu HTTP dapat mengembalikan file .apk sebagaimana diharapkan.
Mekanisme rotasi alamat IP virtual (VIP).
Untuk meningkatkan ketahanan sistem dan stabilitas layanan, Function Compute menggunakan mekanisme rotasi alamat IP virtual (VIP). Artinya, VIP yang sesuai dengan titik akhir publik dan internal pemicu HTTP diputar secara berkala guna meningkatkan ketangguhan infrastruktur.
Perlu diperhatikan bahwa hardcoding VIP dapat menyebabkan gangguan layanan. Kami sangat menyarankan Anda menggunakan nama domain kustom untuk memastikan ketangguhan bisnis. Kegagalan yang disebabkan oleh penggunaan VIP yang tidak tepat tidak dicakup oleh perjanjian tingkat layanan (SLA) Function Compute. Anda harus memeriksa penggunaan Anda dan menyesuaikannya ke metode yang benar.
Anda dapat menggunakan nama domain kustom dengan catatan Nama Domain CNAME (CNAME) untuk mengakses Function Compute. Untuk informasi selengkapnya, lihat Konfigurasi nama domain kustom.
Batasan
Batasan pemicu
Untuk setiap versi atau alias fungsi, Anda hanya dapat membuat satu pemicu HTTP. Untuk informasi lebih lanjut, lihat Kelola versi dan Kelola alias.
Nama domain bawaan yang disediakan oleh pemicu HTTP hanya untuk pengujian. Jangan menggunakannya untuk layanan online eksternal. Praktik ini mencegah potensi masalah stabilitas pada nama domain bawaan memengaruhi layanan online Anda.
CatatanUntuk menyediakan layanan situs web kepada pengguna eksternal, Anda harus menggunakan nama domain yang telah melakukan Pendaftaran ICP. Anda dapat mengonfigurasi nama domain kustom, mengikat nama domain tersebut ke fungsi, lalu menggunakan nama domain Anda sendiri untuk menyediakan layanan. Untuk informasi selengkapnya, lihat Konfigurasi nama domain kustom.
Batasan pada protokol HTTP/HTTPS
Anda dapat menggunakan metode GET, POST, PUT, DELETE, HEAD, PATCH, dan OPTIONS untuk memicu fungsi. Metode-metode ini cocok untuk skenario permintaan-tanggapan sederhana. Untuk informasi selengkapnya, lihat Konfigurasi pemicu HTTP.
Batasan permintaan HTTP
Header permintaan tidak mendukung bidang kustom yang diawali dengan x-fc- atau bidang kustom berikut.
connection
keep-alive
Jika suatu permintaan melebihi batasan berikut, kode status
400dan kode kesalahanInvalidArgumentakan dikembalikan.Ukuran header: Ukuran total semua kunci dan nilai dalam header tidak boleh melebihi 8 KB.
Ukuran path: Ukuran total path, termasuk semua parameter kueri, tidak boleh melebihi 4 KB.
Ukuran body: Ukuran total body untuk permintaan pemanggilan sinkron tidak boleh melebihi 32 MB. Untuk ukuran body permintaan pemanggilan asinkron, lihat Batasan sumber daya.
Batasan tanggapan HTTP
Header respons tidak mendukung bidang kustom yang diawali dengan x-fc- atau bidang kustom berikut.
connection
content-length
date
keep-alive
server
upgrade
content-disposition:attachment
CatatanKarena alasan keamanan, jika Anda menggunakan nama domain aliyuncs.com bawaan dari Function Compute, server secara paksa menambahkan bidang content-disposition: attachment ke header respons. Bidang ini menyebabkan hasil yang dikembalikan diunduh sebagai lampiran di browser. Untuk menghapus pembatasan ini, Anda dapat mengatur nama domain kustom. Untuk informasi selengkapnya, lihat Konfigurasi nama domain kustom.
Jika suatu respons melebihi batasan berikut, kode status
502dan kode kesalahanBadResponseakan dikembalikan.Ukuran header: Ukuran total semua kunci dan nilai dalam header tidak boleh melebihi 8 KB.
Manfaat
Baik pemicu HTTP maupun pemicu API Gateway dapat digunakan untuk membuat aplikasi web. Penggunaannya adalah sebagai berikut:
Pemicu HTTP: Anda dapat mengikat nama domain kustom untuk memetakan jalur akses HTTP yang berbeda untuk fungsi HTTP. Untuk informasi selengkapnya, lihat Konfigurasi nama domain kustom.
Pemicu API Gateway: Anda juga dapat menggunakan API Gateway dengan Function Compute yang ditetapkan sebagai layanan backend untuk mengimplementasikan fitur serupa. Untuk informasi selengkapnya, lihat Menggunakan Function Compute sebagai layanan backend API.
Dibandingkan dengan pemicu API Gateway, pemicu HTTP memiliki manfaat berikut.
Pemicu HTTP lebih mudah dipelajari dan di-debug oleh pengembang. Hal ini membantu pengembang membangun aplikasi web dan API secara cepat menggunakan Function Compute.
Pemicu HTTP mengurangi langkah-langkah pemrosesan permintaan. Mereka mendukung format permintaan dan respons yang efisien dan tidak memerlukan pengkodean atau penguraian ke dalam format JSON. Hal ini menghasilkan kinerja yang lebih baik.
Anda dapat menggunakan alat uji HTTP yang sudah dikenal untuk menguji fitur dan kinerja Function Compute.
Anda dapat dengan mudah mengintegrasikan pemicu HTTP dengan layanan lain yang mendukung callback webhook, seperti back-to-origin CDN dan Simple Message Queue (formerly MNS).
Metode pemanggilan
Pemanggilan sinkron
Panggilan sinkron berarti hasil dikembalikan segera setelah suatu event diproses oleh fungsi. Metode pemanggilan default untuk pemicu HTTP adalah panggilan sinkron. Untuk informasi selengkapnya, lihat Panggilan sinkron.
Pemanggilan asinkron
Dalam pemanggilan asinkron, setelah Function Compute menerima permintaan, permintaan tersebut disimpan untuk persistensi dan segera mengembalikan respons. Layanan ini tidak menunggu permintaan dieksekusi sebelum mengembalikan hasil.
Pemanggilan asinkron: Saat Anda menggunakan pemicu HTTP untuk memanggil fungsi, Anda dapat menambahkan header permintaan
"X-Fc-Invocation-Type":"Async"untuk melakukan pemanggilan asinkron tingkat permintaan.Tugas asinkron: Setelah Anda mengonfigurasi tugas asinkron untuk fungsi HTTP, Anda dapat menambahkan header permintaan
"X-Fc-Async-Task-Id":"g6u*****iyvhd3jk8s6bhj0hh"untuk menentukan ID pemanggilan untuk tugas asinkron tersebut.
Untuk informasi lebih lanjut tentang header permintaan, lihat InvokeFunction.
Setelah pemanggilan asinkron berhasil, Function Compute mengembalikan kode status 202, yang menunjukkan bahwa permintaan diterima. ID permintaan juga dikembalikan dalam header permintaan, misalnya, "X-Fc-Request-Id": "80bf7****281713e1".
Jika Function Compute mengembalikan kode status selain 202, pemanggilan gagal. Untuk informasi selengkapnya tentang penyebab kegagalan pemanggilan, lihat Mekanisme pengulangan.
Referensi:
Untuk informasi selengkapnya tentang pemanggilan asinkron, lihat Pemanggilan asinkron.
Untuk informasi lebih lanjut tentang tugas asinkron, lihat Tugas asinkron.
Autentikasi
Function Compute mendukung autentikasi untuk pemicu HTTP. Ketika pengguna mengakses fungsi melalui pemicu HTTP, Function Compute harus mengautentikasi pengguna sebelum memberikan akses. Metode autentikasi berikut didukung:
Penanganan Permintaan CORS
Secara default, Function Compute mengizinkan akses lintas asal ke permintaan pemanggilan fungsi. Layanan ini juga mendukung penanganan perilaku permintaan lintas asal (CORS) secara kustom dalam kode fungsi Anda.
Permintaan sederhana
Permintaan sederhana tidak mengirim permintaan preflight. Untuk kontrol akses sederhana, Anda dapat mengatur header yang diawali dengan Access-Control-Allow-* dalam kode fungsi. Function Compute mendukung header kustom untuk permintaan sederhana, seperti Access-Control-Allow-Origin, Access-Control-Allow-Headers, dan Access-Control-Max-Age.
Jika Anda tidak mengatur header kustom, Function Compute secara default mengatur header respons ke bidang yang sesuai dalam permintaan:
Access-Control-Allow-Origin: header Origin dari permintaan.Access-Control-Allow-Credentials: Nilai default-nya adalahtrue.Access-Control-Expose-Headers: beberapa header kustom Function Compute.
Permintaan tidak sederhana
Permintaan tidak sederhana mengirim permintaan preflight sebelum mengirim permintaan resmi. Permintaan tidak sederhana mencakup permintaan pemanggilan fungsi metode OPTIONS dan permintaan pemanggilan fungsi aktual. Aturan untuk permintaan resmi sama dengan permintaan sederhana. Untuk menyesuaikan respons permintaan preflight, Anda harus menambahkan metode OPTIONS ke pemicu HTTP. Kemudian, Anda dapat memproses permintaan OPTIONS dalam kode fungsi dengan mengatur header yang diawali dengan Access-Control-Allow-* untuk mengontrol perilaku lintas asal fungsi.
Untuk permintaan preflight, Function Compute mendukung header kustom, termasuk Access-Control-Allow-Origin, Access-Control-Allow-Headers, Access-Control-Allow-Methods, dan Access-Control-Max-Age.
Contoh berikut menunjukkan cara memproses permintaan preflight dalam kode fungsi runtime Node.js bawaan:
exports.handler = (event, context,callback) => {
console.log('hello world');
const method = JSON.parse(event).requestContext.http.method;
if (method === 'OPTIONS') {
// Setel header respons untuk menangani permintaan preflight.
const fcResponse = {
'statusCode': 204,
'headers': {
'Access-Control-Allow-Origin': 'http://www.fc.com',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Max-Age':'3600'
},
'body': 'hello world'
};
callback(null, fcResponse);
} else {
callback(null, {
'statusCode': 500,
'body': 'hello world'
});
}
};