Penangan HTTP hanya mendukung fungsi kontainer kustom yang telah dikonfigurasi dengan CAPort. Topik ini menjelaskan karakteristik struktural, deskripsi pemanggilan, dan batasan penangan HTTP dalam kontainer kustom. Topik ini juga memberikan contoh penggunaan penangan HTTP serta jawaban atas beberapa pertanyaan umum.
Informasi latar belakang
Function Compute meneruskan permintaan Anda, termasuk metode, jalur, kueri, header permintaan, badan permintaan, dan header umum yang dihasilkan oleh Function Compute, ke server HTTP. Anda dapat bermigrasi aplikasi web HTTP yang ada dengan lancar. Untuk informasi lebih lanjut, lihat Fungsi HTTP.
Pemanggilan fungsi
Metode untuk memanggil penangan HTTP mirip dengan operasi API web. Anda dapat mengirim permintaan menggunakan cURL, Postman, atau browser. Saat menggunakan browser untuk mengakses pemicu HTTP, fungsi mungkin didownload secara paksa. Untuk informasi lebih lanjut tentang cara menyelesaikan masalah ini, lihat Mengapa saya perlu mendownload respons saat menggunakan browser web untuk mengakses fungsi dengan pemicu HTTP?
Header | Deskripsi |
(Opsional) x-fc-base-path | Jika Anda tidak menentukan nama domain kustom, |
(Opsional) x-fc-status | Header ini berperilaku serupa dengan header dalam fungsi acara. Ini berlaku untuk fungsi HTTP yang tidak dimigrasikan ke Function Compute tetapi dibuat dengan memanggil operasi API web. Anda dapat menyertakan bidang x-fc-status dalam header respons untuk melaporkan kepada Function Compute apakah fungsi lokal berhasil dipanggil.
Catatan Kami merekomendasikan agar Anda menentukan bidang StatusCode dan x-fc-status dalam respons HTTP. |
Catatan penggunaan
Hanya satu pemicu HTTP yang dapat dibuat untuk fungsi HTTP di setiap versi atau alias layanan. 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 mengembalikan kode status
400dan kode kesalahanInvalidArgumentjika permintaan melebihi salah satu batasan berikut:Ukuran Header: Total ukuran semua kunci dan nilai dalam header tidak boleh melebihi 8 KB.
Ukuran Jalur: Total ukuran jalur, termasuk semua parameter kueri, tidak boleh melebihi 4 KB.
Ukuran Body: Total ukuran body permintaan pemanggilan sinkron tidak boleh melebihi 32 MB. Total ukuran body permintaan pemanggilan asinkron tidak boleh melebihi 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
CatatanUntuk alasan keamanan, jika Anda menggunakan nama domain default aliyuncs.com dari Function Compute, server secara otomatis menambahkan bidang content-disposition: attachment ke header respons. Bidang ini membuat hasil yang dikembalikan menjadi unduhan 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 mengembalikan kode status
502dan kesalahanBadResponse.Ukuran Header: Total ukuran semua kunci dan nilai dalam header tidak boleh melebihi 8 KB.
Lainnya
Anda dapat mengikat nama domain kustom untuk memetakan jalur HTTP yang berbeda ke fungsi HTTP. Untuk informasi lebih lanjut, lihat Konfigurasikan Nama Domain Kustom. Anda juga dapat menggunakan API Gateway untuk mengimplementasikan fitur serupa dengan menyetel jenis layanan backend ke HTTP dan menentukan jalur fungsi HTTP sebagai alamat layanan backend. Untuk informasi lebih lanjut, lihat Gunakan Function Compute sebagai Layanan Backend Operasi API.
Contoh kode
Dalam contoh Node.js Express berikut, metode GET dan POST diarahkan ke penangan yang berbeda. Anda dapat memetakan jalur ke penangan yang Anda butuhkan.
'use strict';
const express = require('express');
// Konstanta
const PORT = 9000;
const HOST = '0.0.0.0';
// Fungsi HTTP get
const app = express();
// Parsing badan permintaan sebagai JSON
app.use(express.json())
app.get('/*', (req, res) => {
console.log(req.body)
res.send('Halo FunctionCompute, http GET');
});
app.post('/*', (req, res) => {
console.log(req.body)
res.send('Halo FunctionCompute, http POST');
});
app.listen(PORT, HOST);
console.log(`Berjalan pada http://${HOST}:${PORT}`);
