All Products
Search
Document Center

Function Compute:Apa yang harus saya lakukan jika mendapatkan error 404 saat mengakses fungsi menggunakan browser atau cURL?

Last Updated:Apr 01, 2026

Gejala

Anda telah membuat fungsi HTTP menggunakan runtime kustom, mengonfigurasi pemicu HTTP anonim, dan mengimplementasikan server HTTP dengan rute sebagai berikut:

@app.route('/test', methods=['POST', 'GET'])
def test():

Saat mengakses fungsi tersebut melalui cURL atau browser, sistem mengembalikan error 404:

# cURL
curl -v https://123456789.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/CustomDemo/func-http/test

# Browser
https://123456789.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/CustomDemo/func-http/test

Akar masalah

URL default untuk fungsi HTTP mengikuti format berikut:

https://<account-id>.<region>.fc.aliyuncs.com/2016-08-15/proxy/<service-name>/<function-name>/<path>

Function Compute meneruskan seluruh path URL — termasuk awalan /2016-08-15/proxy/<service-name>/<function-name> — ke server HTTP runtime kustom Anda. Karena aplikasi Anda hanya mendefinisikan rute /test, aplikasi tersebut tidak dapat menemukan kecocokan untuk path masuk /2016-08-15/proxy/CustomDemo/func-http/test, sehingga menghasilkan error 404.

Solusi

Terdapat tiga pendekatan untuk mengatasi ketidaksesuaian ini. Pilih solusi yang paling sesuai dengan kebutuhan Anda:

  • Gunakan header `x-fc-invocation-target` — solusi tercepat tanpa perlu mengubah kode atau infrastruktur.

  • Bind nama domain kustom — direkomendasikan jika Anda menginginkan URL yang bersih dan ringkas untuk lingkungan produksi.

  • Perbarui entri rute dalam kode fungsi Anda — mempertahankan format URL default dan hanya memerlukan modifikasi pada kode.

Solusi 1: Tambahkan header x-fc-invocation-target

Tambahkan header x-fc-invocation-target untuk memisahkan path fungsi dari path permintaan. Function Compute menggunakan header tersebut untuk mengidentifikasi fungsi target dan hanya meneruskan <path> ke server HTTP Anda.

Sintaks:

curl -v -H "x-fc-invocation-target: 2016-08-15/proxy/<service-name>/<function-name>" \
  https://<account-id>.<region>.fc.aliyuncs.com/<path>

Contoh:

curl -v -H "x-fc-invocation-target: 2016-08-15/proxy/CustomDemo/func-http" \
  https://123456789.cn-hangzhou.fc.aliyuncs.com/test

Dengan header ini, Function Compute mengarahkan permintaan ke func-http dan meneruskan /test ke server HTTP Anda, yang sesuai dengan definisi @app.route('/test', ...).

Solusi 2: Bind nama domain kustom

Bind nama domain kustom ke fungsi tersebut. Function Compute kemudian hanya akan meneruskan path setelah domain — tanpa awalan proxy — ke server HTTP Anda.

Untuk petunjuk penyiapan, lihat Konfigurasikan nama domain kustom.

Penting

Atur path domain ke /* saat mengonfigurasi aturan routing untuk layanan CustomDemo dan fungsi func-http.

Setelah binding selesai, akses fungsi secara langsung:

curl -v https://test.abc.com/test

Solusi 3: Perbarui entri rute dalam kode fungsi Anda

Ubah entri rute dalam kode server HTTP Anda agar sesuai dengan path lengkap yang diteruskan oleh Function Compute, lalu redeploy fungsi tersebut.

Perbarui definisi rute Anda:

@app.route('/2016-08-15/proxy/CustomDemo/func-http/test', methods=['POST', 'GET'])
def test():

Setelah redeploy, URL asli berfungsi:

curl -v https://123456789.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/CustomDemo/func-http/test
Catatan

Pendekatan ini menyematkan nama layanan dan nama fungsi secara langsung dalam entri rute Anda. Jika salah satu di antaranya berubah, Anda harus memperbarui entri rute dan melakukan redeploy.