全部產品
Search
文件中心

Function Compute:HTTP觸發器概述

更新時間:Oct 10, 2025

HTTP觸發器通過發送HTTP請求觸發函數執行,主要適用於快速構建Web服務等情境。在使用HTTP觸發器前,您需要關注觸發器的限制及支援的HTTP/HTTPS協議的限制,防止超過限制而導致函數報錯。同時,本文介紹了HTTP觸發器調用的方式、認證鑒權方式和跨域請求的使用方式等。

注意事項

  • 如果您的HTTP觸發器為匿名觸發器,即觸發器配置中認證方式選擇為無需認證,則無需驗證身份,任何人都可以發送HTTP請求調用您的函數,存在URL泄露的風險。此時,您可以設定檢查請求訊息頭部欄位Authorization是否合法來進行鑒權驗證,避免URL泄露。更多資訊,請參見為HTTP觸發器配置簽名認證

  • 根據國家網路安全監管要求,自2024年06月10日起,新建立的HTTP觸發器將禁止通過公網訪問地址下載APK檔案(MIMETYPE為application/vnd.android.package-archive),APK檔案下載訪問將直接返回400錯誤碼。更多資訊,請參見如何確保HTTP觸發器公網訪問地址正常返回.apk檔案

  • VIP(虛擬IP地址)輪換機制。

    Function Compute服務為了增加系統韌性和服務穩定性,一直以來均實施VIP(虛擬IP地址)輪換機制。這意味著,作為我們基礎設施健壯性的一部分,HTTP觸發器所提供的公網/內網訪問地址所對應的VIP地址將會不定期地進行輪換。

    特別提醒您,直接寫入程式碼VIP地址可能會引發服務中斷,強烈建議通過自訂網域名方式訪問,確保業務的健壯性。注意,因不當使用VIP引發的故障不在Function Compute產品賠付範疇內,請您檢查並調整為正確使用方式。

    您可以使用自訂網域名搭配CNAME來正確訪問Function Compute。更多資訊,請參見配置自訂網域名

使用限制

觸發器限制

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

  • HTTP觸發器預設提供的內建網域名稱只用來提供測試服務,請不要用於對外的線上服務,避免因內建網域名稱提供服務的穩定性影響您的線上服務。

    說明

    對外提供網站類型服務只能通過已備案網域名稱來實現。即通過配置自訂網域名,將網域名稱與函數進行綁定,使用自己的網域名稱對外提供服務。更多資訊,請參見配置自訂網域名

HTTP/HTTPS協議使用限制

說明

支援GET、POST、PUT、DELETE、HEAD、PATCH和OPTIONS方式觸發函數,適用於簡單的要求-回應情境。更多資訊,請參見配置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的大小,請以函數運行資源限制為準。

  • HTTP Response限制

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

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • upgrade

      • content-disposition:attachment

        說明

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

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

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

優勢

HTTP觸發器與API Gateway觸發器均可應用於Web應用的建立。使用方式如下:

  • HTTP觸發器:您可以通過綁定自訂網域名,為HTTP函數映射不同的HTTP訪問路徑。詳細資料,請參見配置自訂網域名

  • API Gateway觸發器:您還可以使用API Gateway,後端服務類型選擇Function Compute,實作類別似功能。詳細資料,請參見使用Function Compute作為API後端服務

相較於API Gateway觸發器,HTTP觸發器有以下優勢。

  • 降低開發人員的學習成本和簡化開發人員的調試過程,協助開發人員快速使用Function Compute搭建Web應用和API。

  • 減少請求處理環節,HTTP觸發器支援更高效的請求、響應格式,不需要編碼或解碼成JSON格式,效能更優。

  • 支援選擇熟悉的HTTP測試載入器驗證Function Compute側的功能和效能。

  • 方便對接其他支援Webhook回調的服務,例如CDN回源、Simple Message Queue (formerly MNS)等。

調用方式

同步調用

同步調用指事件被函數處理後直接返回結果。HTTP觸發器預設的函數調用方式為同步調用。更多資訊,請參見同步調用

非同步呼叫

非同步呼叫指Function Compute收到請求後,將請求持久化儲存,然後立即返迴響應,而不是等待請求執行完成後,再返回執行結果。

  • 非同步呼叫:使用HTTP觸發器調用函數時,您可以通過增加要求標頭"X-Fc-Invocation-Type":"Async"的方式實現請求層級的非同步呼叫。

  • 非同步任務:HTTP函數配置了非同步任務後,您可以通過增加要求標頭"X-Fc-Async-Task-Id":"g6u*****iyvhd3jk8s6bhj0hh"完成非同步任務調用Invocation ID的配置。

關於要求標頭的更多資訊,請參見InvokeFunction - 調用函數

非同步呼叫成功後,Function Compute會返回狀態代碼202,表示請求接收成功。同時會通過要求標頭返回Request ID,格式如"X-Fc-Request-Id": "80bf7****281713e1"

說明

如果Function Compute返回的狀態代碼是202以外的狀態代碼,則表示調用失敗。關於調用失敗後錯誤原因,請參見重試機制

相關文檔:

認證鑒權

Function Compute支援對HTTP觸發器配置認證鑒權。外部使用者通過HTTP觸發器訪問函數時,必須經過Function Compute的認證鑒權之後,才能訪問到函數。HTTP觸發器支援的鑒權方式如下:

CORS請求處理

Function Compute系統預設允許函數的調用請求跨域訪問,同時也支援使用者在函數代碼中自訂函數對跨域(即CORS)請求的處理行為。

簡單請求

簡單請求不會發送預檢請求,您可以直接在函數代碼中設定Access-Control-Allow-*開頭的Header,完成簡單的存取控制。對於簡單請求,Function Compute支援自訂的Headers包括:Access-Control-Allow-OriginAccess-Control-Allow-HeadersAccess-Control-Max-Age

如果您沒有自訂Headers,Function Compute的Response Headers會預設設定為Request請求中相應的欄位:

  • Access-Control-Allow-Origin:Request請求的Origin Header。

  • Access-Control-Allow-Credentials:預設取值為true

  • Access-Control-Expose-Headers:Function Compute自訂的一些Header。

非簡單請求

非簡單請求在發送正式請求前會發送預檢請求,即一次非簡單請求包含一次OPTIONS方法的函數調用請求和一次實際的函數調用請求。正式請求的規則與上文的簡單請求相同。如果您需要自訂預檢請求的返回,則需要為HTTP觸發器添加OPTIONS方法,然後在函數代碼中處理OPTIONS請求,即設定Access-Control-Allow-*開頭的Header以控制函數的跨域行為。

對於預檢請求,Function Compute支援使用者自訂的Headers包括Access-Control-Allow-OriginAccess-Control-Allow-HeadersAccess-Control-Allow-MethodsAccess-Control-Max-Age

以Node.js內建運行時為例,函數代碼中處理預檢請求的樣本如下所示:

exports.handler =  (event, context,callback) => {
      console.log('hello world');
      const method = JSON.parse(event).requestContext.http.method;
      if (method === 'OPTIONS') {
          // 設定回應標頭以處理預檢請求
          const fcResponse = {
            'statusCode': 204,
            'headers': {
              'Access-Control-Allow-Origin': 'http://www.fc.com',
              'Access-Control-Allow-Methods': 'POST',
              'Access-Control-Allow-Headers': 'Content-Type, Authorization',
              'Access-Control-Max-Age':'3600'
            },
            'body': 'hello world'
        };
        callback(null, fcResponse);
      } else {
        callback(null, {
            'statusCode': 500,
            'body': 'hello world'
        });
      }
    };

常見問題

在哪裡可以設定監聽連接埠?

在建立函數時,選擇建立Web函數的方式建立函數時,才需要設定監聽連接埠。

函數調用時間太長,要怎麼處理?

函數出現499錯誤,用戶端主動取消請求要如何處理?

  • 出現用戶端499錯誤後函數執行個體會重啟,您可以通過配置健全狀態檢查避免執行個體重啟,具體原因及操作請參見為什麼函數出現用戶端499錯誤後函數執行個體會重啟?

  • 如果用戶端調用出現逾時情況,您可以將耗時的邏輯放在新的函數中,使用函數的非同步呼叫功能調用新的函數,或者在用戶端調用時使用非同步呼叫。

函數處於運行中,如何更新函數配置?

  • 函數執行完成後才會更新函數配置。更新函數配置後,已經在執行中的請求仍然使用原來的配置運行直到執行結束。新發起的調用請求將使用新的函數配置。

  • 刪除當前函數,建立新的函數重新設定。