Picu fungsi menggunakan permintaan HTTP. Pendekatan ini ideal untuk membangun layanan web dan aplikasi serupa secara cepat. Sebelum memulai, tinjau hal-hal berikut: batas penggunaan untuk pemicu HTTP dan HTTPS; metode pemanggilan sinkron dan asinkron; serta cara mengonfigurasi autentikasi, otorisasi, dan berbagi sumber daya lintas asal (CORS). Topik ini mencakup hal-hal tersebut dan menjawab pertanyaan umum.
Catatan Penting
-
Risiko keamanan dari pemicu anonim: Jika Anda mengatur Authentication Method ke No Authentication saat mengonfigurasi pemicu HTTP, tidak ada verifikasi identitas yang dilakukan. Siapa pun dapat memanggil fungsi Anda melalui permintaan HTTP, yang meningkatkan risiko eksposur URL. Untuk menerapkan otorisasi kustom, validasi header permintaan
Authorizationdalam kode aplikasi Anda. Untuk detailnya, lihat Configure signature-based authentication for HTTP triggers. -
Pembatasan unduhan APK: Sesuai dengan peraturan keamanan siber nasional, mulai 10 Juni 2024, pemicu HTTP yang baru dibuat melarang pengunduhan file APK (tipe MIME
application/vnd.android.package-archive) melalui titik akhir jaringan publik. Permintaan akan mengembalikan kode status HTTP 400. Untuk detailnya, lihat How to ensure your HTTP trigger's public endpoint returns .apk files correctly. -
Rotasi VIP: Function Compute melakukan rotasi alamat IP virtual (VIP) untuk meningkatkan ketahanan sistem dan stabilitas layanan. VIP yang terkait dengan titik akhir publik atau pribadi pemicu HTTP Anda berubah secara berkala. Menyematkan VIP secara statis dapat menyebabkan gangguan layanan. Gunakan nama domain kustom untuk menjaga kelancaran operasi bisnis. Kegagalan yang disebabkan oleh penggunaan VIP yang tidak tepat tidak dicakup dalam perjanjian tingkat layanan Function Compute.
Gunakan nama domain kustom dengan konfigurasi CNAME. Untuk detailnya, lihat Configure a custom domain name.
Batasan
Batasan pemicu
-
Anda dapat membuat paling banyak satu pemicu HTTP per versi atau alias. Untuk informasi lebih lanjut, lihat Version management dan Alias management.
-
Nama domain bawaan hanya untuk pengujian. Jangan menggunakannya untuk layanan produksi karena stabilitasnya tidak dijamin.
CatatanUntuk menghosting layanan bergaya website secara publik, gunakan nama domain kustom yang telah terdaftar ICP. Bind nama domain tersebut ke fungsi Anda sebelum mengeksposnya. Untuk informasi lebih lanjut, lihat Configure a custom domain name.
Batasan protokol HTTP/HTTPS
Function Compute mendukung pemicuan fungsi menggunakan permintaan GET, POST, PUT, DELETE, HEAD, PATCH, dan OPTIONS. Metode ini cocok untuk skenario permintaan-respons sederhana. Untuk informasi lebih lanjut, lihat Configure an HTTP trigger.
-
Batasan permintaan HTTP
-
Header permintaan kustom yang diawali dengan x-fc- tidak didukung. Header kustom berikut juga tidak didukung:
-
connection
-
keep-alive
-
-
Jika permintaan melebihi salah satu batasan berikut, Function Compute mengembalikan kode status HTTP
400dan kode kesalahanInvalidArgument.-
Ukuran header: Ukuran gabungan semua kunci dan nilai header tidak boleh melebihi 8 KB.
-
Ukuran path: Ukuran total path, termasuk semua parameter kueri, tidak boleh melebihi 4 KB.
-
Ukuran badan: Untuk pemanggilan sinkron, badan permintaan tidak boleh melebihi 32 MB. Untuk pemanggilan asinkron, lihat Function execution resource limits.
-
-
-
Batasan respons HTTP
-
Header respons kustom yang diawali dengan x-fc- tidak didukung. Header kustom berikut juga tidak didukung:
-
connection
-
content-length
-
date
-
keep-alive
-
server
-
upgrade
-
content-disposition:attachment
CatatanUntuk alasan keamanan, Function Compute menambahkan content-disposition: attachment ke header respons saat Anda menggunakan nama domain Function Compute bawaan (aliyuncs.com). Hal ini menyebabkan browser mengunduh respons sebagai lampiran. Untuk menghapus perilaku ini, konfigurasikan nama domain kustom. Untuk informasi lebih lanjut, lihat Configure a custom domain name.
-
-
Jika respons melebihi batasan berikut, Function Compute mengembalikan kode status HTTP
502dan kode kesalahanBadResponse.-
Ukuran header: Ukuran gabungan semua kunci dan nilai header tidak boleh melebihi 8 KB.
-
-
Perbandingan dengan API Gateway
Baik pemicu HTTP maupun pemicu API Gateway mendukung pembuatan aplikasi web. Gunakan keduanya sebagai berikut:
-
Pemicu HTTP: Petakan path HTTP berbeda ke fungsi HTTP Anda dengan mengikat nama domain kustom. Untuk detailnya, lihat Configure a custom domain name.
-
Pemicu API Gateway: Anda juga dapat menggunakan API Gateway dengan Function Compute sebagai layanan backend. Untuk detailnya, lihat Use Function Compute as an API backend service.
Dibandingkan dengan pemicu API Gateway, pemicu HTTP menawarkan keunggulan berikut:
-
Mengurangi waktu belajar developer dan menyederhanakan debugging. Membantu developer membangun aplikasi web dan API dengan Function Compute lebih cepat.
-
Mengurangi langkah pemrosesan permintaan. Pemicu HTTP mendukung format permintaan dan respons yang efisien tanpa enkode atau dekode JSON, memberikan kinerja lebih baik.
-
Mendukung alat pengujian HTTP yang sudah dikenal untuk memverifikasi fungsionalitas dan kinerja Function Compute.
-
Mudah diintegrasikan dengan layanan lain yang mendukung webhook seperti CDN origin fetch dan Simple Message Queue (formerly MNS).
Metode Pemanggilan
Pemanggilan sinkron
Pada pemanggilan sinkron, fungsi memproses event dan segera mengembalikan hasilnya. Pemicu HTTP menggunakan pemanggilan sinkron secara default. Untuk informasi lebih lanjut, lihat Synchronous invocation.
Pemanggilan asinkron
Pada pemanggilan asinkron, Function Compute menyimpan permintaan dan segera mengembalikan respons, tanpa menunggu fungsi selesai dieksekusi.
-
Asynchronous invocation: Tambahkan header permintaan
"X-Fc-Invocation-Type":"Async"untuk mengaktifkan pemanggilan asinkron tingkat permintaan. -
Asynchronous task: Setelah mengonfigurasi tugas asinkron untuk fungsi HTTP Anda, tambahkan header permintaan
"X-Fc-Async-Task-Id":"g6u*****iyvhd3jk8s6bhj0hh"untuk menentukan ID pemanggilan.
Untuk informasi lebih lanjut tentang header permintaan, lihat Invoke a function.
Setelah pemanggilan asinkron berhasil, Function Compute mengembalikan kode status HTTP 202, yang menunjukkan permintaan diterima. Respons tersebut juga mengembalikan ID permintaan dalam header respons, contohnya: "X-Fc-Request-Id": "80bf7****281713e1".
Jika Function Compute mengembalikan kode status selain 202, pemanggilan gagal. Untuk mengetahui penyebab kegagalan, lihat Retry mechanism.
Dokumentasi terkait:
-
Untuk informasi lebih lanjut tentang pemanggilan asinkron, lihat Asynchronous invocation.
-
Untuk informasi lebih lanjut tentang tugas asinkron, lihat Asynchronous task.
Autentikasi dan Otorisasi
Function Compute mendukung autentikasi dan otorisasi untuk pemicu HTTP. Pengguna eksternal harus lulus pemeriksaan autentikasi dan otorisasi Function Compute sebelum mengakses fungsi Anda melalui pemicu HTTP. Metode autentikasi yang didukung meliputi:
Penanganan Permintaan CORS
Secara default, Function Compute mengizinkan permintaan lintas asal ke fungsi Anda. Anda juga dapat menyesuaikan cara fungsi Anda menangani permintaan lintas asal (CORS) dalam kode fungsi Anda.
Permintaan simple
Permintaan simple tidak mengirim permintaan preflight, sehingga Anda dapat langsung mengatur header yang diawali dengan Access-Control-Allow-* dalam kode fungsi Anda untuk menerapkan kontrol akses sederhana. Untuk permintaan simple, Function Compute mendukung header kustom berikut: Access-Control-Allow-Origin, Access-Control-Allow-Headers, , dan Access-Control-Max-Age.
Jika Anda tidak mengatur header kustom, Function Compute mengatur header respons berikut secara default, berdasarkan header permintaan yang sesuai:
-
Access-Control-Allow-Origin: Header Origin dari permintaan. -
Access-Control-Allow-Credentials: Nilai default adalahtrue. -
Access-Control-Expose-Headers: Header yang didefinisikan oleh Function Compute.
Permintaan tidak sederhana
Permintaan tidak sederhana mengirim permintaan preflight sebelum permintaan aktual. Permintaan tidak sederhana mencakup satu pemanggilan metode OPTIONS dan satu pemanggilan fungsi aktual. Aturan untuk permintaan aktual sama dengan aturan untuk permintaan simple. Untuk menyesuaikan respons preflight, tambahkan metode OPTIONS ke pemicu HTTP Anda dan tangani permintaan OPTIONS dalam kode fungsi Anda. Atur header respons yang diawali dengan Access-Control-Allow- untuk mengontrol perilaku lintas asal.
Untuk permintaan preflight, Function Compute mendukung header yang dapat dikustomisasi berikut: Access-Control-Allow-Origin, Access-Control-Allow-Headers, Access-Control-Allow-Methods, dan Access-Control-Max-Age.
Sebagai contoh, berikut cara menangani permintaan preflight dalam kode runtime Node.js:
exports.handler = (event, context,callback) => {
console.log('hello world');
const method = JSON.parse(event).requestContext.http.method;
if (method === 'OPTIONS') {
// Set response headers to handle preflight requests
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'
});
}
};
API Configured CORS
API Configured CORS saat ini tersedia sebagai pratinjau undangan. Untuk mengaktifkannya, hubungi kami dan berikan ID akun Alibaba Cloud (UID) Anda.
Deskripsi fitur
API Configured CORS adalah kemampuan tingkat gerbang yang disediakan oleh Function Compute (FC). Konfigurasikan kebijakan CORS langsung pada pemicu HTTP atau nama domain kustom tanpa menulis logika CORS dalam kode fungsi Anda.
Manfaat utama
-
Kode lebih sederhana: Pisahkan logika CORS dari logika bisnis. Fokus hanya pada implementasi logika bisnis inti Anda.
-
Biaya lebih rendah: Gerbang merespons langsung permintaan preflight OPTIONS. Tidak ada instans fungsi yang dipicu, sehingga menghemat biaya durasi.
-
Manajemen terpusat: Konfigurasikan kebijakan di tingkat pemicu atau domain untuk mempermudah administrasi multi-layanan.
-
Respons lebih cepat: Gerbang langsung mengembalikan hasil preflight, mengurangi latensi.
Cakupan penerapan
-
Versi API: Hanya tersedia untuk fungsi FC 3.0 (versi API: 2023-03-30).
-
Metode akses: Pemicu HTTP (termasuk domain uji bawaan) atau nama domain kustom yang telah diikat.
Konfigurasi
Konfigurasikan menggunakan API Update trigger atau Update custom domain name.
Parameter konfigurasi CORS
|
Nama Parameter |
Tipe |
Deskripsi |
Nilai Default |
Batas atau Kendala |
|
allowOrigins |
Array |
Daftar origin yang diizinkan mengakses sumber daya. |
- |
Maksimal 100 item. Setiap item tidak boleh melebihi 256 karakter. Mendukung |
|
allowMethods |
Array |
Daftar metode HTTP yang diizinkan. |
Metode pemicu |
Jangan mengonfigurasi |
|
allowHeaders |
Array |
Header permintaan kustom yang diizinkan dari browser. |
- |
Maksimal 50 item. Mendukung |
|
exposeHeaders |
Array |
Bidang header respons yang diizinkan untuk diakses browser. |
Sistem default |
Maksimal 50 item. |
|
allowCredentials |
Boolean |
Apakah kredensial (seperti cookie) diizinkan dalam permintaan lintas asal. |
false |
Jika diatur ke |
|
maxAge |
Integer |
Durasi cache (dalam detik) untuk respons preflight (OPTIONS). |
3600 |
Rentang valid: 0 hingga 86400. |
Nilai untuk allowOrigins:
-
Wildcard
*: Mengizinkan semua origin (hanya jikaallowCredentialsbernilaifalse). -
Wildcard
https://*: Mengizinkan semua origin yang diawali denganhttps://. -
Domain spesifik: Misalnya,
https://example.com. -
Beberapa domain: Sebagai array, misalnya,
["https://example.com", "https://app.example.com"]. -
Wildcard subdomain (misalnya,
https://*.example.com) tidak didukung.
Nilai untuk allowMethods:
-
Metode HTTP standar:
GET,POST,PUT,DELETE,PATCH,HEAD. -
Wildcard
*: Mengizinkan semua metode HTTP. -
Tidak didukung
OPTIONS: Metode OPTIONS ditangani secara otomatis oleh sistem untuk permintaan preflight.
Logika penanganan permintaan
Setelah mengaktifkan API Configured CORS, gerbang memproses permintaan berdasarkan jenisnya:
1. Permintaan preflight (OPTIONS)
Saat browser mengirim permintaan preflight untuk permintaan tidak sederhana, gerbang memvalidasi header Origin, Access-Control-Request-Method, dan Access-Control-Request-Headers:
-
Validasi lolos: Mengembalikan kode status HTTP
204 No Contentdan menyisipkan header respons CORS yang dikonfigurasi. Tidak memicu fungsi. -
Validasi gagal:
-
Origin cocok tetapi header lain tidak: Gerbang mengatur header CORS dasar.
-
Origin tidak cocok: Header CORS tidak diatur.
-
Permintaan diteruskan ke instans fungsi.
-
2. Permintaan simple (GET, POST, HEAD, dll.)
Gerbang hanya memvalidasi header Origin:
-
Validasi lolos: Menyisipkan
Access-Control-Allow-Origindan header CORS lainnya ke dalam respons. Meneruskan permintaan ke fungsi untuk dieksekusi. -
Validasi gagal: Tidak menyisipkan header CORS. Tetap meneruskan permintaan ke fungsi untuk dieksekusi.
Kompatibilitas dan prioritas
Beberapa metode penanganan CORS dapat berlaku untuk path yang sama. Urutan prioritas (tertinggi ke terendah):
-
API Configured CORS: Jika diaktifkan, gerbang menerapkan logika ini terlebih dahulu.
-
Default CORS: Jika API Configured CORS dinonaktifkan, gerbang menggunakan echo lintas asal bawaan.
-
CORS yang didefinisikan fungsi: Header yang dikembalikan oleh fungsi Anda digabungkan (ditambahkan) dengan hasil di atas untuk memastikan kompatibilitas.
Perbandingan pendekatan
|
Fitur |
API Configured CORS (direkomendasikan) |
Default CORS |
CORS yang didefinisikan pengguna (kode) |
|
Apakah permintaan preflight dikenai biaya? |
Tidak dikenai biaya (diblokir gerbang) |
Berpotensi dikenai biaya |
Dikenai biaya (fungsi dipicu) |
|
Intrusi kode |
Tidak ada |
Tidak ada |
Tinggi |
|
Versi API yang didukung |
Hanya FC 3.0 |
Semua versi |
Semua versi |
|
Kompleksitas konfigurasi |
Rendah (konfigurasi sekali saja) |
Tidak perlu konfigurasi |
Tinggi (harus menangani metode OPTIONS) |
FAQ
Q1: Mengapa panggilan API saya gagal setelah saya mengonfigurasi allowMethods untuk menyertakan OPTIONS?
A: Secara desain, metode OPTIONS dikelola secara otomatis oleh gerbang Function Compute. Jangan menambahkan OPTIONS secara manual ke daftar corsConfig allowMethods. Sistem menangani semua permintaan preflight secara otomatis.
Q2: Setelah konfigurasi berhasil, mengapa permintaan OPTIONS saya tetap mengembalikan 200 bukan 204?
A: Pastikan apakah akun Anda telah diberikan izin “pratinjau undangan” oleh tim jaga. Jika plug-in intersepsi belum sepenuhnya diaktifkan, gerbang kembali ke logika “default CORS” (mengembalikan 200 dan meneruskan ke fungsi).
Q3: Apakah allowOrigins dapat menggunakan wildcard subdomain (misalnya, *.example.com)?
A: Pencocokan kabur subdomain tidak didukung. Cantumkan semua domain tingkat kedua yang diperlukan secara eksplisit dalam array allowOrigins, atau gunakan https://* untuk pencocokan luas.
Q4: Jika kode fungsi saya juga menulis header CORS, apakah akan terjadi konflik?
A: Tidak terjadi konflik. Header yang dihasilkan oleh gerbang digabungkan dengan header yang dikembalikan oleh fungsi Anda. Jika terdapat duplikat, browser biasanya menggunakan nilai pertama atau nilai yang sesuai standar. Hal ini memastikan aplikasi yang ada tetap berjalan tanpa gangguan selama migrasi lancar.