HTTP觸發器通過發送HTTP請求觸發函數執行,主要適用於快速構建Web服務等情境。在使用HTTP觸發器前,您需要關注觸發器的限制及支援的HTTP/HTTPS、WebSocket和gRPC協議的限制,防止超過限制而導致函數報錯。同時,本文介紹了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、WebSocket以及gRPC協議的使用限制。
觸發器限制
HTTP觸發器預設提供的內建網域名稱只用來提供測試服務,請不要用於對外的線上服務,避免因內建網域名稱提供服務的穩定性影響您的線上服務。
說明對外提供網站類型服務只能通過已備案網域名稱來實現。即通過配置自訂網域名,將網域名稱與函數進行綁定,使用自己的網域名稱對外提供服務。更多資訊,請參見配置自訂網域名。
HTTP/HTTPS協議使用限制
支援GET、POST、PUT、DELETE、HEAD、PATCH和OPTIONS方式觸發函數,適用於簡單的要求-回應情境。更多資訊,請參見配置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
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 Compute3.0,函數類型選擇HTTP函數,選擇後端服務地址,實作類別似功能。詳細資料,請參見使用Function Compute作為API後端服務。
相較於API Gateway觸發器,HTTP觸發器有以下優勢。
降低開發人員的學習成本和簡化開發人員的調試過程,協助開發人員快速使用Function Compute搭建Web應用和API。
減少請求處理環節,HTTP觸發器支援更高效的請求、響應格式,不需要編碼或解碼成JSON格式,效能更優。
支援選擇熟悉的HTTP測試載入器驗證Function Compute側的功能和效能。
方便對接其他支援Webhook回調的服務,例如CDN回源、MNS等。
調用方式
調用函數的方式包括同步調用和非同步呼叫。同步調用指事件被函數處理後直接返回結果。非同步呼叫指Function Compute收到請求後,將請求持久化儲存,然後立即返迴響應,而不是等待請求執行完成後,再返回執行結果。
同步調用
HTTP觸發器預設的函數調用方式為同步調用。更多資訊,請參見同步調用。
非同步呼叫
使用HTTP觸發器調用函數時,您可以通過增加要求標頭"X-Fc-Invocation-Type":"Async"
的方式實現請求層級的非同步呼叫。關於要求標頭的更多資訊,請參見InvokeFunction - 調用函數。
非同步呼叫成功後,Function Compute會返回狀態代碼202
,表示請求接收成功。同時會通過要求標頭返回Request ID,格式如"X-Fc-Request-Id": "80bf7****281713e1"
。
如果Function Compute返回的狀態代碼是202
以外的狀態代碼,則表示調用失敗。關於調用失敗後錯誤原因,請參見重試機制。
針對某些情境,您提交一次非同步呼叫後,需要Function Compute對其進行延遲觸發。此時,您可以在代碼中添加HTTP要求標頭x-fc-async-delay
,其取值範圍為(0,3600),單位為秒。Function Compute將從您觸發執行開始計算,延遲x-fc-async-delay
設定的時間後觸發函數調用。更多資訊,請參見延遲調用。
認證鑒權
Function Compute支援對HTTP觸發器配置認證鑒權。外部使用者通過HTTP觸發器訪問函數時,必須經過Function Compute的認證鑒權之後,才能訪問到函數。
HTTP觸發器目前支援簽名認證和JWT認證兩種鑒權方式。
使用簽名認證方式調用HTTP觸發器
用戶端在調用HTTP函數的時候,需要先根據事先分配好的AK和SK對請求內容進行計算簽名,在發起HTTP請求時,需要將AK和簽名資訊傳輸給Function Compute進行驗證。更多資訊,請參見為HTTP觸發器配置簽名認證。
此認證方式安全強度較高,但是需要您自己在用戶端實現簽名演算法,實現成本較高。並且需要將AK和SK儲存在用戶端,AK和SK存在泄漏的風險,雖然可以通過阿里雲臨時安全性權杖(STS)來避免這個問題,但是會引入一定的架構複雜性。
使用JWT(JSON Web Tokens)認證方式調用HTTP函數
JWT是一套流行的API授權訪問機制,安全強度高,適用於JavaScript或Web前端等安全性較低的用戶端情境。更多資訊,請參見為HTTP觸發器配置JWT認證鑒權。
CORS請求處理
Function Compute系統預設允許函數的調用請求跨域訪問。Function Compute的Response Headers預設設定如下。
Access-Control-Allow-Origin
:Request請求的Origin Header。Access-Control-Allow-Credentials
:預設取值為true
。Access-Control-Expose-Headers
:Function Compute自訂的一些Header。