全部产品
Search
文档中心

Function Compute:Ikhtisar

更新时间:Jul 06, 2025

Pemicu HTTP memungkinkan Anda memanggil suatu fungsi melalui permintaan HTTP. Pemicu ini dapat digunakan dalam skenario seperti pengembangan cepat layanan web. Sebelum menggunakan pemicu HTTP, pastikan Anda memahami batasan terkait pemicu serta protokol yang didukung (HTTP/HTTPS, WebSocket, dan gRPC) untuk menghindari kesalahan akibat melebihi batas. Topik ini menjelaskan batasan, metode pemanggilan, metode autentikasi, serta penanganan permintaan Berbagi Sumber Daya Lintas Domain (CORS).

Batasan

  • Jika Anda menggunakan pemicu HTTP anonim dengan Authentication Method diatur ke No Authentication, tidak diperlukan autentikasi identitas. Dalam hal ini, siapa pun dapat mengirim permintaan HTTP untuk memanggil fungsi Anda, yang berpotensi menyebabkan kebocoran URL. Untuk mencegahnya, gunakan bidang Authorization dari header permintaan untuk memvalidasi permintaan. Untuk informasi lebih lanjut, lihat Autentikasi tanda tangan.

  • Sesuai peraturan keamanan siber nasional, mulai 10 Juni 2024, pemicu HTTP baru tidak dapat digunakan untuk mengunduh file Android Package Kit (APK) (tipe mime: application/vnd.android.package-archive) dari titik akhir publik. Kesalahan 400 dilaporkan jika Anda mencoba mengunduh file APK dari titik akhir HTTP publik. Untuk informasi lebih lanjut, lihat Mengapa titik akhir publik dari pemicu HTTP gagal mengembalikan file .apk?.

  • Perhatikan mekanisme rotasi alamat IP virtual (VIP).

    Untuk meningkatkan ketahanan sistem dan stabilitas layanan, Function Compute menerapkan mekanisme rotasi VIP. Secara khusus, VIP yang sesuai dengan titik akhir publik dan internal dari pemicu HTTP di Function Compute diputar secara berkala. Mekanisme rotasi VIP merupakan bagian integral dari ketahanan infrastruktur.

    Oleh karena itu, pengkodean keras VIP dapat menyebabkan gangguan layanan. Kami menyarankan Anda menggunakan nama domain kustom untuk memastikan ketahanan layanan. Perhatikan bahwa kegagalan yang disebabkan oleh penggunaan VIP yang tidak tepat tidak termasuk dalam ruang lingkup kompensasi Function Compute. Tinjau konfigurasi Anda dan buat penyesuaian yang diperlukan jika VIP digunakan secara tidak tepat.

    Anda dapat menggunakan nama domain kustom dengan CNAME untuk mengakses Function Compute. Untuk informasi lebih lanjut, lihat Konfigurasikan nama domain kustom.

Batasan

Sebelum mengonfigurasi dan menggunakan pemicu HTTP, pastikan Anda memahami batasan terkait pemicu serta protokol yang didukung (HTTP/HTTPS, WebSocket, dan gRPC).

Batasan pada pemicu

  • Setelah mengonfigurasi pemicu HTTP untuk sebuah fungsi, Anda tidak dapat mengonfigurasi jenis pemicu lain untuk fungsi tersebut.

  • Untuk setiap versi atau alias, Anda hanya dapat membuat satu pemicu HTTP. Untuk informasi lebih lanjut, lihat Kelola versi dan Kelola alias.

  • Secara default, nama domain bawaan yang disediakan oleh pemicu HTTP adalah hanya untuk pengujian. Stabilitas nama domain bawaan tidak dijamin dan dapat memengaruhi layanan online Anda. Kami menyarankan Anda untuk tidak menggunakan nama domain bawaan untuk layanan online eksternal.

    Catatan

    Layanan situs web hanya dapat disediakan menggunakan nama domain yang telah mendapatkan pendaftaran ICP. Anda dapat mengonfigurasi nama domain kustom, mengikat nama domain ke fungsi Anda, lalu menggunakan nama domain untuk menyediakan layanan. Untuk informasi lebih lanjut, lihat Konfigurasikan nama domain kustom.

Batasan pada HTTP/HTTPS

Catatan

Anda dapat menggunakan metode berikut untuk memicu fungsi: GET, POST, PUT, DELETE, HEAD, PATCH, dan OPTIONS. Protokol HTTP dan HTTPS cocok untuk skenario permintaan-respons sederhana. Untuk informasi lebih lanjut, lihat Konfigurasikan dan gunakan pemicu HTTP.

  • Batasan pada permintaan HTTP

    • Anda tidak dapat menggunakan header permintaan kustom yang dimulai dengan x-fc- atau berisi bidang kustom berikut: connection dan keep-alive.

    • Sistem mengembalikan kode status 400 dan kesalahan InvalidArgument jika permintaan melebihi salah satu batasan berikut:

      • Ukuran header: Ukuran total semua kunci dan nilai dalam header tidak boleh melebihi 8 KB.

      • Ukuran jalur: Ukuran total mencakup semua Query Params. Ukuran total Path tidak boleh melebihi 8 KB.

      • Ukuran body: Ukuran body total permintaan pemanggilan sinkron tidak boleh melebihi 32 MB. Ukuran body total permintaan pemanggilan asinkron tidak boleh melebihi 128 KB.

  • Batasan pada respons HTTP

    • Header respons tidak mendukung bidang kustom yang dimulai dengan x-fc- atau bidang kustom berikut: connection, content-length, date, keep-alive, server, upgrade, dan content-disposition:attachment.

    • Catatan

      Untuk alasan keamanan, jika Anda menggunakan nama domain default aliyuncs.com dari Function Compute, server secara paksa menambahkan bidang content-disposition: attachment dalam header respons. Bidang ini digunakan untuk mengunduh hasil yang dikembalikan dari browser sebagai lampiran. Jika Anda ingin menghapus batasan ini, Anda dapat menggunakan nama domain kustom. Untuk informasi lebih lanjut, lihat Konfigurasikan nama domain kustom.

    • Jika respons melebihi salah satu batasan berikut, sistem mengembalikan kode 502 dan kesalahan BadResponse:

      • Ukuran header: Ukuran total semua kunci dan nilai dalam header tidak boleh melebihi 8 KB.

Batasan pada WebSocket

Catatan

Metode GET dapat digunakan untuk memicu fungsi. WebSocket cocok untuk skenario seperti koneksi persisten dan pesan waktu nyata. Untuk informasi lebih lanjut, lihat Konfigurasikan pemicu HTTP untuk fungsi agar merespons permintaan WebSocket.

  • Runtimes: Hanya runtime kustom dan runtime Custom Container yang mendukung WebSocket.

  • Batasan waktu habis: Periode waktu habis untuk permintaan WebSocket bergantung pada periode waktu habis yang dikonfigurasi untuk fungsi.

  • Batasan permintaan untuk permintaan jabat tangan WebSocket:

    • Header permintaan yang dimulai dengan x-fc- tidak didukung.

    • Ukuran header: Ukuran total semua kunci dan nilai dalam header tidak boleh melebihi 8 KB.

    • Ukuran jalur: Ukuran total jalur, termasuk semua parameter query, tidak boleh melebihi 8 KB.

    • Body: Body tidak dapat dikirim dalam permintaan jabat tangan WebSocket. Bahkan jika body dikirim, Function Compute mengabaikan body.

  • Batasan respons untuk permintaan jabat tangan WebSocket:

    Ukuran total semua kunci dan nilai dalam header respons tidak boleh melebihi 8 KB. Jika tidak, sistem mengembalikan kode 502 dan kesalahan BadResponse.

  • Batasan transmisi data untuk WebSocket:

    Setelah membuka koneksi WebSocket, ukuran maksimum paket (pesan) yang dapat dikirim atau diterima setiap kali tidak boleh melebihi 6 MB.

Batasan pada gRPC

Catatan

Pemicu HTTP dapat dipicu oleh permintaan gRPC. Permintaan gRPC cocok untuk skenario yang memerlukan latensi rendah, performa tinggi, dan komunikasi multi-bahasa berbasis ProtoBuf. Untuk informasi lebih lanjut, lihat Konfigurasikan pemicu HTTP yang memanggil fungsi dengan permintaan gRPC.

  • Runtimes: Hanya runtime kustom dan runtime Custom Container yang mendukung gRPC.

  • Batasan:

    • Sebelum menggunakan gRPC untuk memicu fungsi, pastikan metode POST termasuk dalam Request Methods dari pemicu HTTP.

    • Gunakan subdomain fcapp.run atau nama domain kustom untuk memulai pemanggilan gRPC.

  • Periode waktu habis: Permintaan gRPC bergantung pada periode waktu habis yang dikonfigurasi untuk fungsi. Periode retensi maksimum koneksi streaming gRPC tidak boleh melebihi nilai yang ditentukan untuk parameter Execution Timeout Period dari fungsi.

  • Transmisi data permintaan gRPC: Setelah membuka koneksi streaming gRPC, jumlah data maksimum yang dapat dikirim atau diterima dalam satu paket (pesan) tidak boleh melebihi 6 MB.

Manfaat:

Baik pemicu HTTP maupun pemicu API Gateway dapat digunakan untuk membuat aplikasi web. Item berikut menggambarkan setiap jenis pemicu:

  • Pemicu HTTP: Anda dapat mengikat nama domain kustom untuk memetakan jalur akses HTTP yang berbeda ke fungsi HTTP. Untuk informasi lebih lanjut, lihat Konfigurasikan nama domain kustom.

  • Pemicu API Gateway: Anda juga dapat menggunakan pemicu API Gateway. Dalam hal ini, atur Jenis Layanan Backend ke Function Compute 2.0, atur Jenis Fungsi ke Fungsi HTTP, lalu atur alamat layanan backend untuk mengimplementasikan fitur serupa. Untuk informasi lebih lanjut, lihat Function Compute.

Dibandingkan dengan pemicu API Gateway, pemicu HTTP memberikan manfaat berikut:

  • Pemicu HTTP mudah dipelajari dan digunakan oleh pengembang. Ini menyederhanakan proses debugging dan membantu pengembang dengan cepat membangun aplikasi web dan API menggunakan Function Compute.

  • Anda dapat menggunakan pemicu HTTP untuk mengoptimalkan pemrosesan permintaan. Pemicu HTTP mendukung format permintaan dan respons yang efisien. Anda tidak perlu mengkodekan atau mendekode permintaan ke format JSON, sehingga memberikan performa yang lebih baik.

  • Anda dapat menggunakan alat uji HTTP yang sudah Anda kenal untuk menguji fitur dan performa di Function Compute.

  • Anda dapat dengan mudah menghubungkan pemicu HTTP ke layanan lain yang mendukung webhook, seperti Alibaba Cloud CDN dan Message Service (MNS).

  • Protokol WebSocket dan gRPC didukung.

Metode pemanggilan

Pemanggilan sinkron

Selama pemanggilan sinkron, hasil dikembalikan setelah suatu peristiwa diproses oleh fungsi. Secara default, pemicu HTTP memanggil fungsi dalam mode sinkron. Untuk informasi lebih lanjut, lihat Pemanggilan sinkron.

Pemanggilan asinkron

Selama pemanggilan asinkron, Function Compute menyimpan permintaan dan segera mengembalikan respons tanpa menunggu eksekusi permintaan selesai.

  • Pemanggilan asinkron: Saat fungsi HTTP dipicu, Anda dapat menambahkan header permintaan "X-Fc-Invocation-Type":"Async" untuk mengimplementasikan pemanggilan asinkron pada tingkat permintaan.

  • Tugas asinkron: Setelah mengonfigurasi mode tugas asinkron untuk fungsi HTTP, Anda dapat menambahkan header permintaan "X-Fc-Stateful-Async-Invocation-Id":"g6u*****iyvhd3jk8s6bhj0hh" untuk mengonfigurasi ID pemanggilan untuk tugas asinkron.

Untuk informasi lebih lanjut tentang header permintaan, lihat InvokeFunction.

Jika pemanggilan asinkron berhasil, Function Compute mengembalikan kode 202, yang menunjukkan bahwa permintaan diterima. Kemudian, nilai Request ID dan Stateful Invocation ID dikembalikan dalam format "X-Fc-Request-Id": "80bf7****281713e1", "X-Fc-Stateful-Async-Invocation-Id": "7522ba40****1c22e".

Catatan

Jika kode status yang dikembalikan dari Function Compute bukan 202, pemanggilan asinkron gagal. Untuk informasi lebih lanjut tentang penyebab pemanggilan yang gagal,lihat Penanganan kesalahan.

Dalam skenario tertentu, setelah mengirimkan permintaan pemanggilan asinkron, Anda mungkin ingin Function Compute menunda eksekusi. Jika Anda ingin Function Compute menunda eksekusi, Anda dapat menambahkan header permintaan HTTP x-fc-async-delay ke kode Anda. Rentang nilai untuk header adalah (0,3600). Unit: detik. Function Compute memanggil fungsi setelah periode yang ditentukan untuk x-fc-async-delay berakhir. Untuk informasi lebih lanjut, lihat Pemanggilan tertunda.

Autentikasi

Anda dapat mengonfigurasi autentikasi untuk pemicu HTTP. Setelah mengonfigurasi autentikasi untuk pemicu HTTP, permintaan eksternal harus melewati autentikasi sebelum fungsi dapat memproses permintaan. Autentikasi tanda tangan dan autentikasi JSON Web Token (JWT) dapat dikonfigurasi untuk pemicu HTTP.

Autentikasi tanda tangan

Jika kebijakan autentikasi tanda tangan dikonfigurasi untuk pemicu HTTP, permintaan harus ditandatangani menggunakan ID AccessKey dan Rahasia AccessKey yang ditugaskan. ID AccessKey dan Rahasia AccessKey dikirim ke Function Compute untuk autentikasi. Untuk informasi lebih lanjut, lihat Autentikasi tanda tangan.

Autentikasi tanda tangan memberikan tingkat keamanan yang tinggi. Namun, algoritma tanda tangan harus diimplementasikan pada klien, yang membawa biaya lebih tinggi. Selain itu, ID AccessKey dan Rahasia AccessKey harus disimpan di klien, yang menimbulkan risiko kebocoran data. Token Layanan Token Keamanan Alibaba Cloud (STS) dapat digunakan untuk mengatasi masalah ini, tetapi dapat meningkatkan kompleksitas arsitektur.

Autentikasi JWT

JWT adalah mekanisme populer dan aman untuk otorisasi API dan akses. Cocok untuk skenario klien dengan keamanan rendah seperti JavaScript atau frontend web. Untuk informasi lebih lanjut, lihat Konfigurasikan autentikasi JWT untuk pemicu HTTP.

Pemrosesan permintaan CORS

Secara default, Function Compute mengizinkan akses lintas asal ke fungsi HTTP. Function Compute juga memungkinkan Anda menentukan perilaku pemrosesan kustom untuk permintaan Berbagi Sumber Daya Lintas Domain (CORS) dalam kode fungsi.

Permintaan sederhana

Permintaan preflight tidak diperlukan untuk permintaan sederhana. Anda dapat mengonfigurasi header yang dimulai dengan Access-Control-Allow-* dalam kode fungsi untuk mengimplementasikan kontrol akses dengan mudah. Untuk permintaan sederhana, Function Compute mendukung header kustom berikut: Access-Control-Allow-Origin, Access-Control-Allow-Headers, Access-Control-Request-Method, dan Access-Control-Max-Age.

Jika Anda tidak mengonfigurasi header kustom, Function Compute mengisi header respons berikut:

  • Access-Control-Allow-Origin: header asal dari permintaan.

  • Access-Control-Allow-Credentials: true

  • Access-Control-Expose-Headers: header kustom tertentu di Function Compute.

Permintaan tidak sederhana

Permintaan preflight dikirim sebelum permintaan tidak sederhana dikirim. Browser mengirim permintaan preflight menggunakan metode OPTIONS, lalu memulai permintaan aktual untuk memanggil fungsi. Aturan untuk memulai permintaan tidak sederhana sama dengan aturan untuk memulai permintaan sederhana. Jika Anda ingin menentukan respons kustom untuk permintaan preflight, Anda harus menambahkan metode OPTIONS ke pemicu HTTP dan memproses permintaan OPTIONS dalam kode fungsi. Secara khusus, Anda dapat mengonfigurasi header yang dimulai dengan Access-Control-Allow-* untuk mengontrol perilaku lintas asal fungsi.

Untuk permintaan preflight, Function Compute mendukung header kustom berikut: Access-Control-Allow-Origin, Access-Control-Allow-Headers, Access-Control-Request-Method, dan Access-Control-Max-Age.

Dalam contoh ini, Node.js digunakan untuk menggambarkan cara memproses permintaan preflight dalam kode fungsi:

exports.handler = (req, resp, context) => {
    console.log('hello world');

    if (req.method === 'OPTIONS') {
        // Kirim respons ke permintaan 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

Apakah saya perlu mengonfigurasi port mendengarkan?

Anda hanya perlu mengonfigurasi port mendengarkan jika Anda membuat fungsi dalam runtime kustom atau menggunakan gambar kontainer kustom.

Apakah Function Compute mendukung Server-Sent Event (SSE)?

SSE adalah singkatan dari Server-Sent Events. Fungsi yang dibuat dengan menggunakan metode Use Custom Runtime dan Use Container Image mendukung SSE. Namun, fungsi yang dibuat dengan menggunakan metode Use Built-in Runtime tidak mendukung SSE.

Saat Anda menerapkan fungsi dengan menggunakan metode Use Custom Runtime atau Use Container Image, Function Compute menentukan apakah respons adalah respons streaming berdasarkan apakah header respons berisi Transfer-Encoding:chunked. Untuk memudahkan penggunaan, Anda dapat memilih kode sampel SSE dalam runtime saat Anda menerapkan fungsi dengan menggunakan metode Use Custom Runtime.

Apa yang harus saya lakukan jika suatu fungsi memerlukan waktu lama untuk dipanggil?

Apa yang harus saya lakukan jika kode status 499 dikembalikan ke klien dan klien membatalkan permintaan?

  • Jika kode status 499 dikembalikan di klien, instance fungsi di-restart. Anda dapat mengonfigurasi pemeriksaan kesehatan untuk instance fungsi untuk mencegah instance direstart. Untuk informasi lebih lanjut, lihat Mengapa instance fungsi di-restart setelah kode status 499 terjadi di klien?.

  • Jika pemanggilan fungsi habis waktu di klien, Anda dapat memindahkan logika yang memakan waktu ke kode fungsi baru. Kemudian, panggil fungsi baru dalam mode asinkron. Anda juga dapat menggunakan mode pemanggilan asinkron saat Anda memulai pemanggilan di klien.

Bagaimana cara memperbarui konfigurasi fungsi yang sedang berjalan?

  • Konfigurasi fungsi hanya diperbarui setelah eksekusi fungsi selesai. Setelah Anda memperbarui konfigurasi fungsi, konfigurasi sebelumnya masih berlaku untuk permintaan yang sedang dieksekusi. Konfigurasi yang diperbarui berlaku untuk permintaan berikutnya.

  • Anda dapat menghapus fungsi saat ini dan membuat fungsi lain yang konfigurasinya sesuai dengan kebutuhan bisnis Anda.

Informasi lebih lanjut

Penangan fungsi yang dikonfigurasi dengan pemicu HTTP berbeda dengan penangan fungsi event. Pastikan penangan dikonfigurasi dengan benar. Untuk informasi lebih lanjut, lihat topik-topik berikut: