全部產品
Search
文件中心

Function Compute:HTTP請求處理常式(HTTP Handler)

更新時間:Oct 19, 2024

HTTP請求處理常式僅支援配置了CAPort連接埠的Custom Container函數。本文介紹Custom Container中HTTP請求處理常式的結構特點、調用說明、使用限制、使用樣本和常見問題。

背景資訊

Function Compute會將使用者的請求,包括Method、Path、Body、Query和Headers以及Function Compute系統產生的Common Header,轉寄給HTTP Server。您可以平滑遷移已有的HTTP Web應用。更多資訊,請參見Custom Runtime的HTTP函數

函數調用說明

當HTTP請求處理常式被調用時,和調用一個Web API方式一樣,您可以直接使用cURL、Postman或瀏覽器等方式直接請求調用。如果您是通過瀏覽器訪問HTTP觸發器的,對應的函數被強制下載時,請參見解決方案

Header

描述

(可選)x-fc-base-path

當您尚未配置自訂網域名時,x-fc-base-path的值是/2016-08-15/proxy/${servicename}/${functionname}/

(可選)x-fc-status

當您的HTTP函數不是應用一鍵遷移,而是單純新開發的Web API時,其性質和事件函數類似。

通過Headers中的x-fc-status響應,向Function Compute彙報本地函數是否執行成功。
  • 不設定x-fc-statusFunction Compute預設本次調用是成功執行的,但是您的函數可能有異常,沒有向Function Compute彙報,Function Compute會認為這次函數執行沒有報錯,在商務邏輯上可能沒有影響,但是在監控可觀測性上會有影響。如下圖所示:image8hanshujisuanruntime
  • 設定x-fc-status:當您的函數存在異常,通過x-fc-status響應向Function Compute彙報本次函數執行失敗,並將錯誤堆棧資訊列印到日誌中。如下圖所示:image9runtimefc
說明 在返回的HTTP響應中,建議您同時設定StatusCodex-fc-status

使用限制

  • 一個HTTP函數的一個版本或別名,最多隻能建立一個HTTP類型的觸發器。詳細資料,請參見管理版本管理別名

  • HTTP Request限制

    • Request Headers不支援以x-fc-開頭的自訂欄位和以下自訂欄位:

      • connection

      • keep-alive

    • 如果Request超過以下限制,會返回400狀態代碼和InvalidArgument錯誤碼。

      • Headers大小:Headers中的所有Key和Value的總大小不得超過8 KB。

      • Path大小:包括所有的Query Params,Path的總大小不得超過4 KB。

      • Body大小:同步調用請求的Body的總大小不得超過32 MB,非同步呼叫請求的Body的總大小不得超過128 KB。

  • HTTP Response限制

    • Response Headers不支援以x-fc-開頭的自訂欄位和以下自訂欄位:

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • content-disposition:attachment

        說明

        從安全形度考慮,使用Function Compute預設的aliyuncs.com網域名稱,服務端會在Response Headers中強制添加content-disposition: attachment欄位,此欄位會使得返回結果在瀏覽器中以附件的方式下載。如果需要解除該限制,需設定自訂網域名。更多資訊,請參見配置自訂網域名

    • 如果Response超過以下限制,會返回502狀態代碼和BadResponse錯誤碼。

      • Headers大小:Headers中的所有Key和Value的總大小不得超過8 KB。

  • 其他使用說明

    您可以通過綁定自訂網域名,為HTTP函數映射不同的HTTP訪問路徑。詳細資料,請參見配置自訂網域名。您還可以使用API Gateway,後端服務類型選擇HTTP服務,設定HTTP函數為後端服務地址,實作類別似功能。詳細資料,請參見使用Function Compute作為API後端服務

程式碼範例

在以下Node.js Express樣本中,GET和POST方法分別路由至不同的Handler。您也可以根據需要做任意的Path和Handler映射。

'use strict';

const express = require('express');

// Constants
const PORT = 9000;
const HOST = '0.0.0.0';

// HTTP function get
const app = express();
// Parse request body as JSON
app.use(express.json())

app.get('/*', (req, res) => {
  console.log(req.body)
  res.send('Hello FunctionCompute, http GET');
});

app.post('/*', (req, res) => {
  console.log(req.body)
  res.send('Hello FunctionCompute, http POST');
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

多語言使用樣本

使用Serverless Devs工具,您可以將您的應用一鍵遷移至Function Compute。以下樣本展示如何通過Serverless Devs工具快速部署和調用函數,您可以按需修改範例程式碼,實現二次開發。

常見問題