全部产品
Search
文档中心

Function Compute:Fungsi Web

更新时间:Jul 02, 2025

Topik ini menjelaskan metode dan batasan pemanggilan fungsi dalam runtime kustom serta menyediakan contoh kode.

Informasi latar belakang

Dalam runtime kustom, server HTTP dapat dihosting. Pemanggilan fungsi dapat diubah menjadi permintaan HTTP dan dikirim ke server HTTP. Respons dari server HTTP kemudian dikirimkan ke klien sebagai respons dari pemanggilan fungsi. Gambar berikut mengilustrasikan proses tersebut.

Fungsi dapat dipanggil menggunakan salah satu metode berikut:

  • Panggilan HTTP (direkomendasikan): Fungsi dapat dipanggil melalui panggilan HTTP, seperti menggunakan pemicu HTTP atau nama domain kustom.

  • Panggilan API: Fungsi dapat dipanggil dengan memanggil operasi InvokeFunction, baik melalui SDK maupun sumber acara.

Format permintaan dan respons server HTTP bervariasi tergantung pada metode pemanggilan yang digunakan.

Batasan

  • Hanya satu pemicu HTTP yang dapat dibuat untuk fungsi HTTP di setiap versi atau alias. Untuk informasi lebih lanjut, lihat Kelola Versi dan Kelola Alias.

  • Batasan Permintaan HTTP

    • Header permintaan tidak mendukung bidang kustom yang dimulai dengan x-fc- atau bidang berikut:

      • connection

      • keep-alive

    • Sistem akan mengembalikan kode status 400 dan kode 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 jalur, termasuk semua parameter kueri, tidak boleh melebihi 4 KB.

      • Ukuran Badan: Ukuran total badan permintaan pemanggilan sinkron tidak boleh melebihi 32 MB. Untuk pemanggilan asinkron, ukuran maksimum adalah 128 KB.

  • Batasan Respons HTTP

    • Header respons tidak mendukung bidang kustom yang dimulai dengan x-fc- atau bidang berikut:

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • content-disposition:attachment

        Catatan

        Untuk alasan keamanan, jika Anda menggunakan nama domain default aliyuncs.com dari Function Compute, server secara otomatis menambahkan bidang content-disposition: attachment ke header respons. Hal ini membuat hasil yang dikembalikan diunduh sebagai lampiran di browser. Untuk menghapus batasan ini, Anda harus menentukan nama domain kustom. Untuk informasi lebih lanjut, lihat Konfigurasikan Nama Domain Kustom.

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

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

  • Lainnya

    Anda dapat memetakan jalur HTTP yang berbeda untuk fungsi dengan mengikat nama domain kustom. Untuk informasi lebih lanjut, lihat Konfigurasikan Nama Domain Kustom.

Panggilan HTTP (direkomendasikan)

Untuk panggilan HTTP, Function Compute meneruskan permintaan HTTP dari klien ke server HTTP dan respons dari server HTTP ke klien menggunakan mode passthrough. Beberapa bidang cadangan sistem tidak dapat diteruskan. Untuk informasi lebih lanjut, lihat Batasan.

Header permintaan HTTP

Jika Anda menggunakan pemicu HTTP atau nama domain kustom untuk memanggil fungsi, Anda dapat menggunakan header permintaan untuk mengontrol perilaku permintaan di Function Compute. Tabel berikut menjelaskan detailnya.

Parameter

Tipe

Wajib

Contoh

Deskripsi

X-Fc-Invocation-Type

String

Tidak

Sync

Mode pemanggilan. Untuk informasi lebih lanjut, lihat Metode pemanggilan. Nilai valid:

  • Sync: pemanggilan sinkron

  • Async: pemanggilan asinkron

X-Fc-Log-Type

String

Tidak

Tail

Metode yang digunakan untuk mengembalikan log. Nilai valid:

  • Tail: mengembalikan 4 KB terakhir log yang dihasilkan untuk permintaan saat ini.

  • None: tidak mengembalikan log untuk permintaan saat ini. Ini adalah nilai default.

Header respons HTTP

Saat menggunakan pemicu HTTP atau nama domain kustom untuk memanggil fungsi, respons berisi beberapa header respons yang secara otomatis ditambahkan oleh Function Compute. Tabel berikut menjelaskan detailnya.

Parameter

Deskripsi

Contoh

X-Fc-Request-Id

ID permintaan pemanggilan fungsi.

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

Panggilan API

Untuk pemanggilan fungsi yang diinisiasi oleh operasi InvokeFunction, Function Compute mengubah permintaan yang dikirim dari operasi InvokeFunction menjadi permintaan HTTP dan meneruskannya ke klien. Aturan konversi berikut berlaku:

  • Parameter event dari InvokeFunction diubah menjadi badan pesan permintaan HTTP.

  • path disetel ke /invoke.

  • method disetel ke POST.

  • Content-Type disetel ke application/octe-stream.

Function Compute mengubah respons server HTTP menjadi respons InvokeFunction dan mengembalikannya ke klien. Aturan konversi berikut berlaku:

  • Badan respons HTTP diubah menjadi badan respons InvokeFunction.

  • Header respons HTTP dan informasi kode status hilang selama konversi.

Contoh konversi permintaan InvokeFunction

Permintaan InvokeFunction

Permintaan HTTP yang diterima oleh server HTTP

Konten permintaan InvokeFunction:

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

hello world

Contoh keluaran respons InvokeFunction

Respons HTTP

Respons InvokeFunction

< 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 2023 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 28
< Connection: keep-alive

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

Contoh kode

Saat mengonfigurasi pemicu untuk fungsi Anda, Anda dapat mengimplementasikan server HTTP dalam bahasa apa pun. Python digunakan sebagai contoh dalam topik ini.

Catatan

Contoh kode bergantung pada lingkungan Python dan pustaka Flask. Kami merekomendasikan Anda memilih Web Function sebagai metode untuk membuat fungsi dan menggunakan 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)

    

Deskripsi:

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

  • @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']): Rute dinamis yang berisi parameter jalur. Permintaan GET, POST, PUT, dan DELETE dapat diproses. Nilai parameter jalur diteruskan ke fungsi hello_world sebagai parameter jalur.

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

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

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