日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

HTTP觸發器調用函數

HTTP觸發器提供了函數專用的HTTP和HTTPS地址,您可以直接通過HTTP觸發器提供的URL直接調用函數。本文主要介紹內置運行時如何使用HTTP觸發器調用函數。

注意事項

在函數計算3.0版中,自定義運行時和自定義鏡像運行環境的HTTP觸發器行為與函數計算2.0版一致,但內置運行時函數的HTTP觸發器與函數計算2.0版有較大的差異。本文介紹的內容是如何在內置運行時使用HTTP觸發器調用函數。

調用函數流程

當客戶端調用函數URL時,函數計算會將請求映射到事件對象event,再將event傳遞給函數。然后函數的響應將映射到一個HTTP響應,函數計算會通過函數URL將HTTP響應發送回客戶端。

請求結構體

請求結構體格式

請求結構體格式如下:

{
    "version": "v1",
    "rawPath": "/example",
    "body": "Hello FC!",
    "isBase64Encoded": false,
    "headers": {
        "header1": "value1",
        "header2": "value1,value2"
    },
    "queryParameters": {
        "parameter1": "value1",
        "parameter2": "value1,value2"
    },
    "requestContext": {
        "accountId": "123456*********",
        "domainName": "<http-trigger-id>.<region-id>.fcapp.run",
        "domainPrefix": "<http-trigger-id>",
        "http": {
            "method": "GET",
            "path": "/example",
            "protocol": "HTTP/1.1",
            "sourceIp": "11.11.11.**",
            "userAgent": "PostmanRuntime/7.32.3"
        },
        "requestId": "1-64f6cd87-*************",
        "time": "2023-09-05T06:41:11Z",
        "timeEpoch": "1693896071895"
    }
}

請求結構體參數說明如下:

參數

說明

示例

version

此事件的有效負載格式版本。目前版本為v1。

v1

rawPath

請求路徑。例如,如果請求URL為https://{url-id}.{region}.fcapp.run/example,則原始路徑值為 /example。rawPath是經過URL編碼后,如果要獲取URL解碼后的path,請使用參數requestContext.http.path。

/example

body

請求的正文。如果請求的內容類型為二進制,則正文為Base64編碼。

Hello FC!

isBase64Encoded

如果正文為二進制,并且為Base64編碼,則為true,否則為false。

false

headers

該參數為請求頭的列表。以鍵值對的形式顯示,當一個鍵存在多個值時,值之間使用逗號分隔。

當使用HTTP觸發器調用內置運行時,FC3.0將HTTP請求轉換成HTTP觸發器的Event格式,將HTTP請求Header的鍵進行規范化,Header的鍵的首字母變為大寫,詳情參見Header鍵的首字母為什么變成了大寫?

{"Header1": "value1", "Header2": "value1,value2"}

queryParameters

請求的查詢參數。例如,如果請求URL為https://{url-id}.{region}.fcapp.run/example?key1=value1,則queryStringParameters值是一個JSON對象,其鍵為key1,值為value1。當一個鍵存在多個值時,值之間會使用逗號分隔,比如{"key1": "value1", "key2": "value2,value3"}

{

"parameter1": "value1",

"parameter2": "value1,value2"

}

requestContext

一個包含有關請求的附加信息的對象,例如requestId、請求的時間以及通過授權的調用者身份。

requestContext.accountId

函數擁有者的阿里云賬戶ID。

123456*********

requestContext.domainName

函數HTTP觸發器的域名。

<http-trigger-id>.<region-id>.fcapp.run

requestContext.domainPrefix

函數HTTP觸發器的域前綴。

<http-trigger-id>

requestContext.http

包含有關HTTP請求的詳細信息。

requestContext.http.method

此請求中使用的HTTP方法。有效值包括GET、POST、PUT、HEAD、OPTIONS、PATCH和DELETE。

GET

requestContext.http.path

請求路徑。例如,如果請求URL為https://{url-id}.{region}.fcapp.run/example?name=Jane,則路徑值為/example。

/example

requestContext.http.protocol

請求的協議。

HTTP/1.1

requestContext.http.sourceIp

發出請求的即時TCP連接的源IP地址。該IP地址是直接建立連接的對端IP地址(RemoteAddr),即直接連接到服務器的客戶端地址或最后一個代理的IP地址。

11.11.XX.XX

requestContext.http.userAgent

用戶代理請求標頭值。

PostmanRuntime/7.32.3

requestContext.requestId

調用請求的ID??梢允褂么薎D跟蹤與函數相關的調用日志。

1-64f6cd87-*************

requestContext.time

請求的時間戳。

2023-09-05T06:41:11Z

requestContext.timeEpoch

請求的時間戳,用Unix時間表示。

1693896071895

Base64編碼機制

函數計算在將HTTP請求映射到事件對象event時,會根據請求頭中的Content-Type類型判斷是否對HTTP Body進行Base64編碼。

當請求頭中的Content-Type表示文本類型時,不會對響應體進行Base64編碼;否則,會對響應體進行Base64編碼。

Content-Type為文本類型的取值如下:

  • text/*

  • application/json

  • application/ld+json

  • application/xhtml+xml

  • application/xml

  • application/atom+xml

  • application/javascript

響應結構體

響應結構體格式

當函數返回響應時,函數計算會解析響應并將其轉換為HTTP響應。解析后的響應結構體格式如下:

{
    "statusCode": 200,
    "headers": {
        "Content-Type": "application/json",
        "Custom-Header-1": "Custom Value"
    },
    "isBase64Encoded": "false",
    "body": "{\"message\":\"Hello FC!\"}"
}

函數計算解析邏輯

函數計算會解析響應并構造HTTP Response返回給客戶端。

  • 如果您的函數返回有效的JSON并且包含statusCode字段,函數計算解析邏輯如下:

    • statusCode:函數返回JSON中的statusCode值。

    • Content-Type:函數返回JSON中的Content-Type值。如果JSON中沒有Content-Type,Content-Type默認為application/json

    • body:函數響應,函數返回JSON中的body值。

    • isBase64Encoded:函數返回JSON中的isBase64Encoded值,如果JSON中沒有isBase64Encoded,則默認為false。

  • 如果您的函數返回有效的JSON但是沒有包含statusCode字段,或者返回的不是有效的JSON,函數計算會做出以下假設,構造響應結構體。

    • statusCode:默認為200。

    • Content-Type:默認為application/json。

    • body:函數響應,即代碼中return的數據。

    • isBase64Encoded:默認為false。

函數計算會將函數響應結構體映射成HTTP響應返回給客戶端,映射邏輯如下:

  • statusCode映射為HTTP響應的狀態碼。

  • headers映射為HTTP響應頭。

  • body映射為HTTP響應體,如果存在isBase64Encoded且為true,則先將body進行Base64解碼,再映射到HTTP響應體。

示例

以下示例介紹了函數的輸出如何映射到函數響應結構體,以及函數響應結構體如何映射到最終的HTTP響應。當客戶端調用函數HTTP觸發器時,就可以看到HTTP響應。

字符串響應的輸出

函數輸出

解析函數輸出

HTTP響應(客戶端看到的內容)

Hello World!

{
  "statusCode": 200,
  "body": "Hello World!",
  "headers": {
    "content-type": "application/json"
  },
  "isBase64Encoded": false
}
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Length: 12
Content-Type: application/json
X-Fc-Request-Id: 1-64f6d6e7-e01edb1cce58240ed59b59d9
Date: Tue, 05 Sep 2023 07:21:11 GMT

Hello World!

JSON響應的輸出

函數輸出

解析函數輸出

HTTP響應(客戶端看到的內容)

{"message": "Hello World!"}

{
  "statusCode": 200,
  "body": "{\"message\": \"Hello World!\"}",
  "headers": {
    "content-type": "application/json"
  },
  "isBase64Encoded": false
}
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Length: 27
Content-Type: application/json
X-Fc-Request-Id: 1-64f6d867-7302fc1ac6338b6fd2adb782
Date: Tue, 05 Sep 2023 07:27:35 GMT

{"message": "Hello World!"}

自定義響應的輸出

函數輸出

解析函數輸出

HTTP響應(客戶端看到的內容)

{
   "statusCode": 201,
    "headers": {
        "Content-Type": "application/json",
        "My-Custom-Header": "Custom Value"
    },
    "body": {
        "message": "Hello, world!"
    },
    "isBase64Encoded": false
}
{
   "statusCode": 201,
    "headers": {
        "Content-Type": "application/json",
        "My-Custom-Header": "Custom Value"
    },
    "body": {
        "message": "Hello, world!"
    },
    "isBase64Encoded": false
}
HTTP/1.1 201 OK
Content-Disposition: attachment
Content-Length: 27
Content-Type: application/json
Custom-Header-1: Custom Value
X-Fc-Request-Id: 1-64f6dcb3-e787580749d3ba13b047ce14
Date: Tue, 05 Sep 2023 07:45:55 GMT

{"message": "Hello world!"}

Base64解碼機制

當函數輸出為有效的JSON格式,且JSON中的isBase64Encoded字段為true時,函數計算會將JSON中的body字段進行Base64解碼,再將解碼后的數據通過HTTP響應體返回給客戶端。

如果對body字段解碼失敗,函數計算不會報錯,而是直接將原始的body字段的值返回給客戶端。

響應頭(HTTP Response Header)

使用HTTP觸發器調用函數時,響應頭中會包含函數計算默認添加的響應頭X-Fc-Request-Id, 是此次請求的唯一標識。除了X-Fc-Request-Id,函數計算不會默認添加其他響應頭。

您可以在代碼中返回自定義的響應頭,但不支持X-Fc-開頭的響應頭和以下函數計算保留的響應頭:

  • connection

  • content-length

  • date

  • keep-alive

  • server

  • content-disposition

如果您在響應頭中設置了這些保留字,函數計算會直接忽略您設置的響應頭。

錯誤處理

當遇到函數錯誤時,通過API調用會返回具體的錯誤信息,HTTP返回碼為200。比如Python的ModuleNotFound錯誤的響應如下:

{
    "errorMessage": "Unable to import module 'index'",
    "errorType": "ImportModuleError",
    "stackTrace": [
        "ModuleNotFoundError: No module named 'not_exist_module'"
    ]
}

但使用HTTP 觸發器調用時,函數計算會隱藏這些錯誤信息,直接返回 Internal Server Error,HTTP返回碼為502。HTTP響應示例如下:

HTTP/1.1 502 Bad Gateway
Content-Disposition: attachment
Content-Type: application/json
X-Fc-Request-Id: 1-64f6df91-fe144d52e4fd27afe3d8dd6f
Date: Tue, 05 Sep 2023 07:58:09 GMT
Content-Length: 21

Internal Server Error

此時,您可以通過請求返回的X-Fc-Request-Id在日志中查找具體的報錯信息。

代碼開發

在FC 3.0內置運行時中,編寫代碼時,請參考以下運行時請求處理程序(Handler) 文檔。