全部产品
Search
文档中心

Function Compute:Penangan HTTP

更新时间:Jul 02, 2025

Anda dapat menggunakan penangan HTTP untuk memproses permintaan HTTP secara efisien. Saat suatu fungsi dipanggil, Function Compute menggunakan penangan yang Anda tentukan untuk memproses permintaan tersebut. Topik ini menjelaskan struktur dan karakteristik penangan HTTP dalam Python.

Catatan penggunaan

Sebelum menggunakan penangan HTTP, pastikan Pemicu HTTP telah dikonfigurasi untuk fungsi HTTP Anda. Untuk informasi lebih lanjut, lihat Konfigurasikan Pemicu HTTP yang Memanggil Fungsi dengan Permintaan HTTP.

Tanda tangan untuk penangan HTTP

Tanda tangan penangan HTTP dalam Python mengikuti spesifikasi Python Web Server Gateway Interface (WSGI).

Contoh kode berikut menunjukkan tanda tangan penangan HTTP:

def handler(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, world!</h1>']

Pada kode sebelumnya:

  • handler: Fungsi yang dipanggil untuk menanggapi permintaan HTTP sesuai spesifikasi WSGI. Parameter yang dapat dilewatkan adalah sebagai berikut:

    • environ: Informasi terkait semua permintaan HTTP.

    • start_response: Fungsi yang digunakan untuk mengirim respons HTTP.

  • start_response('200 OK', [('Content-Type', 'text/html')]): Respons dari fungsi, yang mencakup dua parameter. Parameter pertama menunjukkan kode status HTTP, sedangkan parameter kedua adalah header HTTP yang terdiri dari serangkaian objek daftar Python. Setiap header HTTP merupakan objek tuple Python yang berisi dua string Python.

  • return [b'<h1>Hello, world!</h1>']: Nilai kembalian yang dikirim oleh server ke klien sebagai badan respons HTTP.

Contoh: Implementasikan aplikasi Flask

Kode contoh

Setelah membuat penangan HTTP yang sesuai dengan spesifikasi WSGI, aplikasi berbasis kerangka kerja web seperti Flask dan Django dapat dimigrasikan dengan cepat ke Function Compute. Kode berikut menunjukkan cara menjalankan aplikasi Flask-based hello world di waktu proses Python pada Function Compute.

from flask import Flask

app = Flask(__name__)

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

def handler(environ, start_response):
    return app(environ, start_response)

Pada kode contoh sebelumnya:

  • Bagian 1: Kode aplikasi berbasis Flask. Bagian ini dimulai dari from flask import Flask hingga return 'Web App with Python Flask!'.

  • Bagian 2: Fungsi handler. Untuk menjalankan aplikasi berbasis kerangka kerja web seperti Flask atau Django di waktu proses Python pada Function Compute, Anda hanya perlu mengimplementasikan fungsi handler sebagai return app(environ, start_response).

Before you start

Buat layanan

Procedure

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

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

  3. Di halaman Functions, klik Create Function.

    Buat fungsi HTTP dengan lingkungan runtime Python 3. Untuk informasi lebih lanjut, lihat Buat fungsi.

  4. Di halaman Function Details, klik tab Code dan masukkan kode contoh sebelumnya di editor kode. Lalu, pilih Terminal > New Terminal. Jalankan pip install flask -t . di editor kode TERMINAL. Instal pustaka Flask di direktori saat ini dan klik Deploy.

  5. Klik Tes Fungsi.

    Lihat respons. Jika pesan Web App with Python Flask! muncul, fungsi berhasil dieksekusi.

Struktur permintaan HTTP (environ)

Struktur permintaan HTTP digunakan untuk menyimpan informasi tentang permintaan HTTP. Struktur ini berupa kamus Python. Tabel berikut menggambarkan parameter umum dalam struktur permintaan. Untuk informasi lebih lanjut, lihat Variabel environ.

Parameter

Tipe

Deskripsi

REQUEST_METHOD

String

Metode permintaan HTTP, seperti GET atau POST.

HTTP_Variables

String

Variabel yang sesuai dengan header permintaan HTTP yang diberikan oleh klien.

CONTENT_TYPE

String

Tipe badan permintaan HTTP.

CONTENT_LENGTH

String

Panjang badan permintaan HTTP.

REMOTE_ADDR

String

Alamat IP klien.

wsgi.input

BytesIO

Badan permintaan HTTP.

fc.request_uri

String

URL permintaan klien. URL ditentukan oleh Function Compute.

fc.context

FCContext

Konteks. Konteks ditentukan oleh Function Compute.

Catatan

Parameter HTTP_Variables dalam struktur permintaan (environ) adalah header permintaan HTTP di mana key diproses sebagai key="HTTP_"+k.upper().replace("-","_") berdasarkan spesifikasi WSGI. Sebagai contoh, jika header permintaan adalah 'x-Custom-key':'value', parameter HTTP_Variables dalam struktur permintaan direpresentasikan sebagai environ['HTTP_X_CUSTOM_KEY']='value'.

Contoh kode berikut menunjukkan cara mendapatkan struktur permintaan penangan HTTP.

# Metode 1: Pengguna memberikan fungsi. FC memanggil fungsi untuk memproses permintaan dan mengirim balasan.

HELLO_WORLD = b"Hello world!\n"

def handler(environ, start_response):
    context = environ['fc.context']
    request_uri = environ['fc.request_uri']
    for k, v in environ.items():
        if k.startswith("HTTP_"):
            # Proses header permintaan khusus
            pass

    # Dapatkan request_body
    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)

    # Dapatkan request_method
    request_method = environ['REQUEST_METHOD']

    # Dapatkan path_info
    path_info = environ['PATH_INFO']

    # Dapatkan server_protocol
    server_protocol = environ['SERVER_PROTOCOL']

    # Dapatkan content_type
    try:
        content_type = environ['CONTENT_TYPE']
    except (KeyError):
        content_type = " "

    # Dapatkan query_string
    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))
    # Lakukan sesuatu di sini

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

Struktur respons HTTP

Struktur respons penangan HTTP mencakup status respons, header respons, dan badan respons. Sebelum aplikasi mengembalikan badan respons, Anda harus memanggil fungsi start_response() untuk mengembalikan nilai status dan headers ke server. Badan respons harus berupa objek iteratif.

start_response adalah callable. Kode berikut memberikan struktur sampel dari start_response. Untuk informasi lebih lanjut tentang start_response, lihat The start_response() Callable.

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

Item berikut menggambarkan parameter:

Parameter

Tipe

Deskripsi

status

String

Status respons HTTP.

response_headers

Daftar

Header respons HTTP.

exc_info

Daftar

Informasi pengecualian dalam format tupel yang harus dikembalikan server ke klien. Parameter ini tidak digunakan dalam Function Compute.

Batasan

  • Batasan Permintaan

    Jika permintaan melebihi salah satu batasan berikut, sistem akan mengembalikan kode status 400 dan kesalahan InvalidArgument.

    Bidang

    Deskripsi

    Kode status HTTP

    Kode kesalahan

    headers

    Total ukuran kunci dan nilai dalam header permintaan tidak boleh melebihi 8 KB.

    400

    InvalidArgument

    path

    Total ukuran jalur permintaan dan parameter kueri tidak boleh melebihi 4 KB.

    body

    Total ukuran badan permintaan panggilan sinkron tidak boleh melebihi 32 MB. Total ukuran badan permintaan panggilan asinkron tidak boleh melebihi 128 KB.

  • Batasan Respons

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

    Bidang

    Deskripsi

    Kode status HTTP

    Kode kesalahan

    headers

    Total ukuran kunci dan nilai dalam header respons tidak boleh melebihi 8 KB.

    502

    BadResponse