All Products
Search
Document Center

Function Compute:Penangan HTTP

Last Updated:Apr 01, 2026

Penangan HTTP memungkinkan Anda memproses permintaan HTTP secara langsung dalam Python menggunakan spesifikasi Python Web Server Gateway Interface (WSGI). Saat permintaan tiba, Function Compute memanggil penangan yang Anda tentukan, meneruskan data permintaan melalui environ dan callback respons melalui start_response.

Pemicu HTTP harus dikonfigurasi untuk fungsi Anda agar dapat menerima permintaan HTTP. Lihat Konfigurasikan pemicu HTTP yang memanggil fungsi dengan permintaan HTTP.

Signature penangan

Setiap penangan HTTP mengikuti signature WSGI:

def handler(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, world!</h1>']
ParameterTipeDeskripsi
environdictKamus Python yang berisi semua data permintaan HTTP. Lihat Bidang permintaan (environ) untuk daftar lengkap bidang.
start_responsecallableFungsi yang disediakan oleh waktu proses FC. Panggil fungsi ini untuk mengatur status dan header respons sebelum mengembalikan badan respons.

Nilai kembali harus berupa objek iterable. return [b'<h1>Hello, world!</h1>'] mengembalikan daftar yang berisi satu objek bytes, yang dikirimkan oleh waktu proses ke klien sebagai badan respons HTTP.

Untuk spesifikasi WSGI lengkap, lihat PEP 3333.

Migrasi aplikasi Flask ke Function Compute

Karena penangan HTTP mengikuti spesifikasi WSGI, aplikasi Flask dan Django hanya memerlukan satu fungsi adaptor untuk dijalankan di Function Compute.

Contoh berikut menjalankan aplikasi Flask hello world di waktu proses Python 3:

# Aplikasi Flask — definisikan rute seperti biasa
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Web App with Python Flask!'

# Penangan FC — meneruskan setiap permintaan ke aplikasi WSGI Flask
def handler(environ, start_response):
    return app(environ, start_response)

Contoh ini terdiri dari dua bagian:

  • Aplikasi Flask (baris 1–7): Kode Flask standar. Tidak perlu perubahan.

  • Penangan FC (baris 9–11): Adaptor minimal yang meneruskan environ dan start_response langsung ke aplikasi Flask. Hanya satu baris ini yang diperlukan untuk menjalankan framework apa pun yang kompatibel dengan WSGI di Function Compute.

Deploy aplikasi Flask

Sebelum memulai, buat layanan.

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.

  3. Di halaman Functions, klik Create Function untuk membuat fungsi HTTP dengan runtime Python 3. Untuk detail selengkapnya, lihat Membuat fungsi.

  4. Pada halaman Function Details, klik tab Code dan tempel kode contoh ke editor. Lalu pilih TERMINAL > New Terminal dan jalankan perintah berikut di panel TERMINAL untuk menginstal Flask di direktori saat ini:

    pip install flask -t .
  5. Klik Deploy.

  6. Klik Test Function dan periksa respons. Jika Web App with Python Flask! muncul, fungsi tersebut berjalan dengan benar.

Bidang permintaan (environ)

environ adalah kamus Python yang berisi semua data permintaan HTTP. Tabel berikut mencantumkan bidang yang paling umum digunakan dalam penangan Function Compute. Untuk daftar lengkap bidang, lihat variabel environ.

BidangTipeDeskripsi
REQUEST_METHODStringMetode permintaan HTTP, seperti GET atau POST.
HTTP_*StringHeader permintaan yang dikirim client. Setiap kunci header dinormalisasi menjadi HTTP_ + kunci yang diubah ke huruf kapital dan tanda hubung diganti garis bawah. Misalnya, x-Custom-key: value menjadi environ['HTTP_X_CUSTOM_KEY'] = 'value'.
CONTENT_TYPEStringJenis media dari badan permintaan.
CONTENT_LENGTHStringPanjang badan permintaan dalam byte.
REMOTE_ADDRStringAlamat IP client.
wsgi.inputBytesIOBadan permintaan.
fc.request_uriStringURL permintaan lengkap, sebagaimana didefinisikan oleh Function Compute.
fc.contextFCContextKonteks pemanggilan fungsi, sebagaimana didefinisikan oleh Function Compute.

Contoh berikut membaca bidang umum dari environ:

HELLO_WORLD = b"Hello world!\n"

def handler(environ, start_response):
    # Konteks dan URI permintaan khusus FC
    context = environ['fc.context']
    request_uri = environ['fc.request_uri']

    # Iterasi header permintaan kustom (semua dimulai dengan HTTP_)
    for k, v in environ.items():
        if k.startswith("HTTP_"):
            pass  # proses header kustom di sini

    # Baca badan permintaan
    try:
        request_body_size = int(environ.get('CONTENT_LENGTH', 0))
    except ValueError:
        request_body_size = 0
    request_body = environ['wsgi.input'].read(request_body_size)

    # Baca bidang umum lainnya
    request_method = environ['REQUEST_METHOD']
    path_info = environ['PATH_INFO']
    server_protocol = environ['SERVER_PROTOCOL']

    try:
        content_type = environ['CONTENT_TYPE']
    except KeyError:
        content_type = " "

    try:
        query_string = environ['QUERY_STRING']
    except KeyError:
        query_string = " "

    print('request_body: {}'.format(request_body))
    print('method: {}\n path: {}\n query_string: {}\n server_protocol: {}\n'.format(
        request_method, path_info, query_string, server_protocol))

    status = '200 OK'
    response_headers = [('Content-type', 'text/plain')]
    start_response(status, response_headers)
    return [HELLO_WORLD]  # nilai kembali harus berupa iterable

Struktur respons (start_response)

Panggil start_response untuk mengatur status dan header respons sebelum mengembalikan badan respons. Waktu proses FC menyediakan callable ini dengan signature berikut:

# Disediakan oleh waktu proses FC.
# status: string seperti '200 OK' atau '403 FORBIDDEN'
# return: harus berupa callable write(body_data)
def start_response(status, response_headers, exc_info=None):
    ...

Untuk spesifikasi lengkap, lihat Callable start_response().

ParameterTipeDeskripsi
statusStringStatus respons HTTP, seperti '200 OK' atau '403 FORBIDDEN'.
response_headersDaftarHeader respons HTTP. Setiap header berupa tupel dua string: (header_name, header_value).
exc_infoDaftarInformasi pengecualian dalam format tupel untuk respons error. Tidak digunakan di Function Compute.

Badan respons yang dikembalikan oleh penangan harus berupa objek iterable.

Batasan

Batasan permintaan

Permintaan yang melebihi batasan berikut ditolak dengan status HTTP 400 dan error InvalidArgument.

BidangBatasan
headersUkuran total semua kunci dan nilai ≤ 8 KB
pathUkuran total path permintaan dan parameter kueri ≤ 4 KB
body (pemanggilan sinkron)≤ 32 MB
body (pemanggilan asinkron)≤ 128 KB

Batasan respons

Respons yang melebihi batasan berikut menghasilkan status HTTP 502 dan error BadResponse.

BidangBatasan
headersUkuran total semua kunci dan nilai ≤ 8 KB

Langkah selanjutnya