Pemicu HTTP memungkinkan Anda memanggil fungsi Function Compute melalui permintaan HTTP tanpa perlu mengelola infrastruktur atau API Gateway. Gunakan pemicu HTTP untuk membangun layanan web dan API secara langsung di Function Compute.
Topik ini mencakup batasan pemicu, batasan protokol, metode pemanggilan, opsi autentikasi, serta penanganan Berbagi Sumber Daya Lintas Asal (CORS) untuk pemicu HTTP.
Pemicu HTTP vs. pemicu API Gateway
Baik pemicu HTTP maupun pemicu API Gateway mendukung pembuatan aplikasi web di Function Compute. Pilih berdasarkan kebutuhan Anda:
| Kriteria | Pemicu HTTP | Pemicu API Gateway |
|---|---|---|
| Kompleksitas pengaturan | Rendah — bind nama domain kustom dan petakan path ke fungsi | Lebih tinggi — konfigurasikan tipe layanan backend, tipe fungsi, dan alamat backend |
| Format permintaan | HTTP native — tidak memerlukan encoding/decoding JSON | Memerlukan encoding/decoding JSON untuk permintaan |
| Dukungan protokol | HTTP/HTTPS, WebSocket, gRPC | HTTP/HTTPS |
| Integrasi webhook | Langsung — kompatibel dengan Alibaba Cloud CDN, Message Service (MNS), dan layanan lain yang mendukung webhook | Memerlukan konfigurasi tambahan |
| Paling cocok untuk | Prototipe, API sederhana, skenario real-time atau streaming | Aplikasi produksi yang memerlukan routing lanjutan, pembatasan kecepatan, caching, atau transformasi permintaan/tanggapan |
Untuk lalu lintas situs web, bind nama domain kustom dengan Pendaftaran ICP (Internet Content Provider filing) yang valid ke fungsi Anda. Lihat Konfigurasi nama domain kustom.
Batasan
Konfigurasi pemicu
Fungsi yang dikonfigurasi dengan pemicu HTTP tidak dapat menggunakan jenis pemicu lainnya.
Setiap versi atau alias fungsi mendukung paling banyak satu pemicu HTTP. Untuk detailnya, lihat Kelola versi dan Kelola alias.
Nama domain bawaan yang disediakan oleh pemicu HTTP hanya untuk pengujian. Stabilitasnya tidak dijamin. Jangan gunakan untuk layanan produksi.
Rotasi VIP
Function Compute secara berkala merotasi alamat IP virtual (VIP) yang terkait dengan titik akhir publik dan internal pemicu HTTP. Menyimpan kode keras (hard-coding) VIP dapat menyebabkan gangguan layanan. Gunakan nama domain kustom dengan catatan CNAME (Canonical Name) sebagai gantinya. Kegagalan yang disebabkan oleh hard-coded VIP tidak dicakup oleh kebijakan kompensasi Function Compute. Lihat Konfigurasi nama domain kustom.
Batasan unduh APK
Mulai 10 Juni 2024, pemicu HTTP yang baru dibuat tidak dapat melayani file APK (tipe MIME: application/vnd.android.package-archive) dari titik akhir publik. Permintaan yang mencoba mengunduh file APK dari titik akhir publik akan mengembalikan error 400.
Risiko pemicu anonim
Jika Authentication Method diatur ke No Authentication, siapa pun yang memiliki URL dapat memanggil fungsi Anda. Untuk memvalidasi pemanggil tanpa mengaktifkan otentikasi penuh, periksa header permintaan Authorization dalam kode fungsi Anda. Lihat otentikasi tanda tangan.
Batasan protokol
HTTP/HTTPS
Pemicu HTTP mendukung metode permintaan berikut: GET, POST, PUT, DELETE, HEAD, PATCH, dan OPTIONS. Untuk instruksi pengaturan, lihat Konfigurasi dan gunakan pemicu HTTP.
Batasan permintaan
| Resource | Batasan | Error saat pelanggaran |
|---|---|---|
| Header (ukuran total semua kunci dan nilai) | 8 KB | 400 InvalidArgument |
| Path (termasuk parameter kueri) | 8 KB | 400 InvalidArgument |
| Body — pemanggilan sinkron | 32 MB | 400 InvalidArgument |
| Body — pemanggilan asinkron | 128 KB | 400 InvalidArgument |
Header permintaan kustom yang diawali dengan x-fc- atau menggunakan nama bidang terbatas connection dan keep-alive tidak didukung.
Batasan tanggapan
| Resource | Batasan | Error saat dilanggar |
|---|---|---|
| Header (ukuran total semua kunci dan nilai) | 8 KB | 502 BadResponse |
Header tanggapan kustom yang diawali dengan x-fc- atau menggunakan salah satu nama bidang terbatas berikut tidak didukung: connection, content-length, date, keep-alive, server, upgrade, content-disposition:attachment.
Saat menggunakan domain bawaanaliyuncs.com, Function Compute memaksa header tanggapancontent-disposition: attachment, yang menyebabkan browser mengunduh tanggapan sebagai file alih-alih menampilkannya. Untuk menghapus batasan ini, gunakan nama domain kustom. Lihat Konfigurasi nama domain kustom.
WebSocket
WebSocket cocok untuk koneksi persisten dan pesan real-time. Untuk instruksi pengaturan, lihat Konfigurasi pemicu HTTP untuk fungsi agar merespons permintaan WebSocket.
Runtime yang didukung: Hanya Custom Runtime dan Custom Container.
Metode yang didukung:
GET(untuk handshake).Timeout: Mengikuti periode timeout yang dikonfigurasi pada fungsi.
Batasan permintaan handshake
| Resource | Batas | Kesalahan Akibat Pelanggaran |
|---|---|---|
| Header (ukuran total) | 8 KB | 502 BadResponse |
| Path (termasuk parameter kueri) | 8 KB | — |
| Body | Tidak diperbolehkan; diabaikan jika dikirim | — |
Header permintaan yang diawali dengan x-fc- tidak didukung dalam permintaan handshake WebSocket.
Batasan transmisi data
Setiap pesan yang dikirim atau diterima melalui koneksi WebSocket yang telah terbentuk tidak boleh melebihi 6 MB.
gRPC
gRPC cocok untuk skenario latensi rendah dan berkinerja tinggi dengan komunikasi multibahasa berbasis Protocol Buffers (ProtoBuf). Untuk instruksi pengaturan, lihat Konfigurasi pemicu HTTP yang memanggil fungsi dengan permintaan gRPC.
Runtime yang didukung: Hanya Custom Runtime dan Custom Container.
Metode yang diperlukan: Sertakan
POSTdalam konfigurasi Request Methods pemicu HTTP.Titik akhir pemanggilan: Gunakan subdomain
fcapp.runatau nama domain kustom.Timeout: Tunduk pada timeout yang dikonfigurasi pada fungsi. Untuk gRPC streaming, periode retensi koneksi maksimum sama dengan Periode Timeout Eksekusi.
Batasan transmisi data
Setiap pesan dalam koneksi streaming gRPC tidak boleh melebihi 6 MB.
Metode pemanggilan
Pemanggilan sinkron
Secara default, pemicu HTTP memanggil fungsi secara sinkron. Function Compute memproses permintaan dan mengembalikan hasil sebelum menutup koneksi. Lihat Pemanggilan sinkron.
Pemanggilan asinkron
Untuk pemanggilan asinkron, Function Compute menyimpan permintaan dan segera mengembalikan respons 202, tanpa menunggu eksekusi selesai.
Memulai pemanggilan asinkron
Tambahkan header permintaan berikut untuk memicu eksekusi asinkron:
X-Fc-Invocation-Type: AsyncJika berhasil, respons mencakup:
X-Fc-Request-Id: 80bf7****281713e1
X-Fc-Stateful-Async-Invocation-Id: 7522ba40****1c22eKode status selain 202 berarti pemanggilan asinkron gagal. Lihat Penanganan error.
Mode tugas asinkron
Setelah mengonfigurasi fungsi untuk mode tugas asinkron, tentukan ID pemanggilan kustom dengan:
X-Fc-Stateful-Async-Invocation-Id: <your-invocation-id>Lihat Tugas asinkron untuk detailnya.
Pemanggilan tertunda
Untuk menunda eksekusi setelah mengirim permintaan asinkron, tambahkan header x-fc-async-delay dengan nilai dalam satuan detik. Rentang nilai yang valid adalah (0, 3600). Function Compute memulai eksekusi setelah jeda yang ditentukan berakhir. Lihat Pemanggilan tertunda.
Untuk daftar lengkap header permintaan pemanggilan yang didukung, lihat InvokeFunction.
Otentikasi
Pemicu HTTP mendukung dua metode otentikasi. Pilih berdasarkan kebutuhan keamanan dan lingkungan klien Anda.
| Metode | Paling cocok untuk | Kompromi |
|---|---|---|
| Otentikasi Tanda Tangan | Panggilan server-ke-server, skenario keamanan tinggi | Memerlukan logika penandatanganan di sisi klien; rahasia AccessKey harus disimpan secara aman di klien. Gunakan token Security Token Service (STS) untuk mengurangi eksposur rahasia, dengan biaya tambahan kompleksitas arsitektur. |
| JWT authentication | Klien berbasis browser, frontend JavaScript, skenario keamanan lebih rendah | Didukung luas dan mudah diimplementasikan; tidak cocok untuk skenario server keamanan tinggi. |
Otentikasi signature
Permintaan harus ditandatangani dengan ID AccessKey dan Rahasia AccessKey, yang diteruskan ke Function Compute untuk verifikasi. Lihat Otentikasi signature.
Otentikasi JWT
Otentikasi Token Web JSON (JWT) adalah mekanisme standar untuk otorisasi API (RFC 7519). Metode ini sangat cocok untuk frontend web dan klien JavaScript tempat penyimpanan Rahasia AccessKey tidak praktis. Lihat Konfigurasi otentikasi JWT untuk pemicu HTTP.
Penanganan permintaan CORS
Secara default, Function Compute mengizinkan akses lintas asal ke fungsi HTTP. Function Compute juga memungkinkan Anda menentukan perilaku pemrosesan CORS kustom dalam kode fungsi.
Permintaan simple
Permintaan simple tidak memerlukan preflight. Tambahkan header Access-Control-Allow-* dalam kode fungsi untuk mengonfigurasi kontrol akses. Header kustom yang didukung:
Access-Control-Allow-OriginAccess-Control-Allow-HeadersAccess-Control-Request-MethodAccess-Control-Max-Age
Jika tidak ada header kustom yang diatur, Function Compute mengisi nilai default berikut:
Access-Control-Allow-Origin: nilaiOrigindari permintaanAccess-Control-Allow-Credentials: trueAccess-Control-Expose-Headers: header kustom khusus Function Compute
Permintaan tidak sederhana
Sebelum mengirim permintaan tidak sederhana, browser mengirim permintaan preflight OPTIONS. Untuk menanganinya:
Tambahkan
OPTIONSke konfigurasi Request Methods pemicu HTTP Anda.Deteksi dan tanggapi metode
OPTIONSdalam kode fungsi.
Contoh Node.js berikut menunjukkan cara merespons permintaan preflight:
exports.handler = (req, resp, context) => {
if (req.method === 'OPTIONS') {
resp.setHeader('Access-Control-Allow-Origin', 'http://www.fc.com');
resp.setHeader('Access-Control-Allow-Methods', 'POST');
resp.setHeader('Access-Control-Allow-Headers', 'Content-Type');
resp.setHeader('Access-Control-Max-Age', '3600');
resp.setStatusCode(204);
resp.send('');
} else {
resp.send('hello world');
}
};FAQ
Langkah selanjutnya
Fungsi pemicu HTTP menggunakan signature handler yang berbeda dari fungsi event. Pastikan handler Anda diimplementasikan dengan benar sesuai runtime Anda: