全部产品
Search
文档中心

Function Compute:Fungsi Web

更新时间:Mar 25, 2026

Topik ini menjelaskan metode pemanggilan, batasan, dan contoh kode untuk fungsi web dalam runtime kustom.

Latar Belakang

Runtime kustom dapat menjalankan server HTTP Anda. Function Compute mengonversi permintaan pemanggilan fungsi menjadi permintaan HTTP dan mengirimkannya ke server Anda. Respons dari server kemudian dikonversi menjadi respons pemanggilan fungsi dan dikembalikan ke klien.

image

Anda dapat memanggil fungsi dengan dua cara:

  • Panggilan HTTP (Direkomendasikan): Memanggil fungsi melalui HTTP menggunakan Pemicu HTTP atau nama domain kustom.

  • Panggilan API: Memanggil fungsi dengan menggunakan API InvokeFunction melalui SDK atau sumber event.

Format permintaan dan respons untuk server HTTP Anda berbeda tergantung pada metode pemanggilan yang digunakan.

Batasan

  • Anda hanya dapat membuat satu Pemicu HTTP untuk setiap versi atau alias fungsi. Untuk informasi selengkapnya, lihat Mengelola versi dan Mengelola alias.

  • Batasan permintaan HTTP

    • Header permintaan tidak boleh berisi bidang kustom yang diawali dengan x-fc- atau bidang terbatas berikut:

      • connection

      • keep-alive

    • Jika permintaan melebihi batasan berikut, Function Compute akan mengembalikan kode status 400 dan kode kesalahan InvalidArgument.

      • 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 badan: Ukuran total badan permintaan pemanggilan sinkron tidak boleh melebihi 32 MB. Ukuran total badan permintaan pemanggilan asinkron tidak boleh melebihi 128 KB.

  • Batasan respons HTTP

    • Header respons tidak boleh berisi bidang kustom yang diawali dengan x-fc- atau bidang terbatas berikut:

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • content-disposition:attachment

        Catatan

        Untuk alasan keamanan, saat Anda menggunakan domain default aliyuncs.com yang disediakan oleh Function Compute, layanan secara otomatis menambahkan header content-disposition: attachment ke respons. Hal ini menyebabkan respons diunduh sebagai lampiran di browser. Untuk menghapus pembatasan ini, Anda harus mengonfigurasi nama domain kustom.

    • Jika respons melebihi batasan berikut, Function Compute akan mengembalikan kode status 502 dan kode kesalahan BadResponse.

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

  • Informasi tambahan

    Anda dapat memetakan path akses HTTP yang berbeda ke fungsi Anda dengan mengaitkannya ke nama domain kustom. Untuk informasi selengkapnya, lihat Mengonfigurasi nama domain kustom.

Panggilan HTTP (Direkomendasikan)

Untuk panggilan HTTP, Function Compute menggunakan mode passthrough. Permintaan HTTP dari klien diteruskan ke server HTTP Anda, dan respons server dikirim kembali ke klien. Bidang-bidang tertentu yang dicadangkan sistem tidak diteruskan. Untuk detailnya, lihat Batasan.

Header permintaan

Saat memanggil fungsi menggunakan Pemicu HTTP atau nama domain kustom, Anda dapat mengonfigurasi header permintaan untuk mengontrol perilaku permintaan. Tabel berikut menjelaskan header permintaan tersebut.

Parameter

Tipe

Wajib

Contoh

Deskripsi

X-Fc-Invocation-Type

String

Tidak

Sync

Metode pemanggilan. Untuk informasi selengkapnya, lihat Metode pemanggilan. Nilai yang valid:

  • Sync: Pemanggilan sinkron.

  • Async: Pemanggilan asinkron.

X-Fc-Log-Type

String

Tidak

Tail

Menentukan apakah log eksekusi disertakan dalam respons. Nilai yang valid:

  • Tail: Mengembalikan 4 KB terakhir dari log yang dihasilkan untuk permintaan tersebut.

  • None: Tidak mengembalikan log eksekusi. Ini adalah nilai default.

Header respons

Saat memanggil fungsi menggunakan Pemicu HTTP atau nama domain kustom, respons mencakup header yang ditambahkan oleh Function Compute. Tabel berikut menjelaskan header respons tersebut.

Parameter

Deskripsi

Contoh

X-Fc-Request-Id

ID permintaan unik untuk pemanggilan fungsi.

dab25e58-9356-4e3f-97d6-f044c4****

Panggilan API

Untuk panggilan API yang menggunakan API InvokeFunction, Function Compute mengonversi permintaan API menjadi permintaan HTTP dan meneruskannya ke server HTTP Anda. Konversi mengikuti aturan berikut:

  • Parameter event dari permintaan InvokeFunction dikonversi menjadi badan permintaan HTTP.

  • path diatur ke /invoke.

  • method diatur ke POST.

  • Header Content-Type diatur ke application/octet-stream.

Function Compute kemudian mengonversi respons dari server HTTP Anda menjadi respons InvokeFunction dan mengembalikannya ke klien. Konversi mengikuti aturan berikut:

  • Badan respons HTTP dikonversi menjadi badan respons InvokeFunction.

  • Konversi mengabaikan header respons HTTP dan kode status.

Konversi permintaan InvokeFunction

InvokeFunction request

Permintaan HTTP yang diterima

Isi permintaan InvokeFunction:

"hello world"
> POST /invoke HTTP/1.1
> Host: 21.0.X.X
> Content-Length: 11
>

**【中文原稿】**:

Contoh respons API Invoke

Respons HTTP

Respons Invoke

< HTTP/1.1 200 OK
< Date: Mon, 10 Jul 2025 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 11
< Connection: keep-alive

hello world

hello world
< HTTP/1.1 400 Bad Request
< Date: Mon, 10 Jul 2025 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 28
< Connection: keep-alive

{"errorMessage":"exception"}
{"errorMessage":"exception"}

Kode respons dan header Function Compute

Runtime Kustom adalah server HTTP yang Anda implementasikan. Setiap pemanggilan fungsi merupakan permintaan HTTP. Akibatnya, setiap respons memiliki kode respons dan header respons.

  • Kode respons StatusCode

    • 200: Menunjukkan keberhasilan.

    • 404: Menunjukkan kegagalan.

  • Header respons x-fc-status

    • 200: Menunjukkan keberhasilan.

    • 404: Menunjukkan kegagalan.

Gunakan header respons x-fc-status untuk melaporkan kepada Function Compute apakah fungsi lokal dieksekusi dengan sukses.

  • Jika x-fc-status tidak diatur: Function Compute secara default mengasumsikan pemanggilan berhasil. Jika terjadi exception dalam fungsi tetapi tidak dilaporkan, Function Compute tetap menganggap eksekusi berhasil. Hal ini mungkin tidak memengaruhi logika bisnis, tetapi berdampak pada pemantauan dan observabilitas, seperti yang ditunjukkan pada gambar berikut:

    image

  • Jika x-fc-status diatur: Jika terjadi exception dalam fungsi, gunakan respons x-fc-status untuk melaporkan kegagalan eksekusi kepada Function Compute. Hal ini juga mencetak jejak stack error ke log, seperti yang ditunjukkan pada gambar berikut:image9runtimefc

Catatan

Dalam respons HTTP yang dikembalikan, atur kedua hal berikut: StatusCode dan x-fc-status.

Contoh kode

Setelah mengonfigurasi pemicu untuk fungsi, Anda dapat mengimplementasikan server HTTP dalam bahasa apa pun. Contoh berikut menggunakan Python.

Catatan

Kode contoh ini bergantung pada lingkungan Python dan library Flask. Untuk menjalankan kode ini, buat Web Function dan pilih Python 3.10 sebagai runtime.

import os
from flask import Flask
from flask import request

REQUEST_ID_HEADER = 'x-fc-request-id'
app = Flask(__name__)


@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def hello_world(path):
    rid = request.headers.get(REQUEST_ID_HEADER)
    data = request.stream.read()
    print("Path: " + path)
    print("Data: " + str(data))
    return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)

    

Penjelasan kode sebagai berikut:

  • @app.route('/', defaults={'path': ''}): Rute default yang sesuai dengan path root.

  • @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']): Rute dinamis dengan parameter path yang menangani permintaan GET, POST, PUT, dan DELETE. Nilai parameter path diteruskan ke fungsi hello_world sebagai argumen path.

  • rid = request.headers.get(REQUEST_ID_HEADER): Mendapatkan nilai bidang x-fc-request-id dari header permintaan.

  • data = request.stream.read(): Membaca konten permintaan dan menetapkannya ke variabel data.

  • return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]: Mengembalikan badan respons yang berisi "Hello, World!", menetapkan kode status ke 200, dan menyertakan tupel dengan header Function-Name.