Tous les produits
Search
Centre de documentation

Function Compute:Utiliser un déclencheur HTTP pour invoquer une fonction

Dernière mise à jour :Aug 22, 2026

Un déclencheur HTTP expose une fonction sous la forme d'un endpoint HTTP(S), appelé URL de fonction. Lorsqu'un client appelle l'URL de fonction, Function Compute convertit la requête HTTP en objet événement et le transmet au gestionnaire de votre fonction. Une fois la fonction exécutée, Function Compute mappe la sortie vers une réponse HTTP et l'envoie au client.

Cette rubrique décrit le comportement du déclencheur HTTP dans les environnements d'exécution intégrés. Pour les environnements d'exécution personnalisés, consultez Fonctions web.

Dans Function Compute 3.0, le comportement du déclencheur HTTP dans les environnements d'exécution intégrés diffère sensiblement de celui de Function Compute 2.0. Pour plus de détails, voir Fonctionnement . Pour les environnements d'exécution personnalisés et les environnements Custom Container, le comportement reste identique à celui de Function Compute 2.0.

Fonctionnement

image

Lorsqu'un client appelle l'URL de votre fonction :

  1. Function Compute mappe la requête HTTP vers un objet événement (event).

  2. L'objet événement est transmis au gestionnaire de votre fonction.

  3. Une fois votre fonction terminée, Function Compute mappe la sortie vers une réponse HTTP et la renvoie au client.

Structure de la requête

Format

Function Compute mappe la requête HTTP entrante vers un objet événement présentant la structure suivante :

{
    "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"
    }
}

Paramètres

Paramètre Description Exemple
version Version du format de charge utile. La seule valeur prise en charge est v1. v1
rawPath Chemin de la requête encodé en URL. Pour une URL de requête telle que https://{url-id}.{region}.fcapp.run/example, cette valeur est /example. Pour le chemin décodé, voir requestContext.http.path. /example
body Corps de la requête. Les données binaires sont encodées en Base64. Hello FC!
isBase64Encoded Indique si le corps de la requête est encodé en Base64. Valeurs valides : true, false. false
headers En-têtes de requête sous forme de paires clé-valeur. Si une clé possède plusieurs valeurs, elles sont séparées par des virgules. Dans Function Compute 3.0, la première lettre de chaque clé d'en-tête est mise en majuscule (normalisation). Voir Pourquoi la première lettre de la clé d'en-tête devient-elle majuscule lors de l'utilisation d'un déclencheur HTTP pour invoquer une fonction ? {"Header1": "value1", "Header2": "value1,value2"}
queryParameters Paramètres de requête sous forme d'objet JSON. Pour une URL telle que https://{url-id}.{region}.fcapp.run/example?key1=value1, cette valeur est {"key1": "value1"}. Plusieurs valeurs pour la même clé sont séparées par des virgules. {"parameter1": "value1", "parameter2": "value1,value2"}
requestContext Métadonnées supplémentaires de la requête, incluant l'ID de requête, l'horodatage et les informations sur l'appelant.
requestContext.accountId ID du compte Alibaba Cloud propriétaire de la fonction. 123456*********
requestContext.domainName Nom de domaine du déclencheur HTTP. <http-trigger-id>.<region-id>.fcapp.run
requestContext.domainPrefix Préfixe de domaine du déclencheur HTTP. <http-trigger-id>
requestContext.http Informations détaillées sur la requête HTTP.
requestContext.http.method Méthode HTTP. Valeurs valides : GET, POST, PUT, HEAD, OPTIONS, PATCH, DELETE. GET
requestContext.http.path Chemin de la requête décodé. Pour une URL de requête telle que https://{url-id}.{region}.fcapp.run/example?name=Jane, cette valeur est /example. /example
requestContext.http.protocol Protocole de la requête. HTTP/1.1
requestContext.http.sourceIp Adresse IP homologue de la connexion TCP directe (RemoteAddr). Voir la note ci-dessous. 11.11.XX.XX
requestContext.http.userAgent Valeur de l'en-tête de requête user-agent. PostmanRuntime/7.32.3
requestContext.requestId ID de requête permettant de tracer les journaux d'invocation. 1-64f6cd87-*************
requestContext.time Horodatage de la requête au format ISO 8601. 2023-09-05T06:41:11Z
requestContext.timeEpoch Horodatage de la requête en temps UNIX (millisecondes). 1693896071895
Avertissement

sourceIp correspond à l'adresse IP homologue de la connexion TCP directe, et non nécessairement à l'IP originale du client. Si la requête n'est pas transférée par un proxy, sourceIp est l'IP du client. Si la requête traverse un ou plusieurs proxys, sourceIp est l'IP du dernier proxy. Pour obtenir l'IP originale du client lorsque les requêtes transitent par des proxys, lisez l'en-tête X-Forwarded-For. Pour plus de détails, voir Comment obtenir l'adresse IP originale d'un client lorsqu'un déclencheur HTTP invoque une fonction utilisant un environnement d'exécution intégré ?

Logique de mappage

Function Compute mappe la requête HTTP vers l'objet événement comme suit :

  • En-têtes de requête HTTP → event.headers

  • Paramètres de requête HTTP → event.queryParameters

  • Contexte de la requête (ID de requête, horodatage, identité de l'appelant) → event.requestContext

  • Corps de la requête POST → event.body

Encodage Base64

Function Compute vérifie l'en-tête Content-Type pour décider s'il faut encoder le corps de la requête en Base64.

**Content-Type** **isBase64Encoded** Traitement du corps
text/* false Transmis tel quel
application/json false Transmis tel quel
application/ld+json false Transmis tel quel
application/xhtml+xml false Transmis tel quel
application/xml false Transmis tel quel
application/atom+xml false Transmis tel quel
application/javascript false Transmis tel quel
Toute autre valeur true Encodé en Base64 avant transmission à la fonction

Exemples de mappage de requête

GET

Requête HTTP Objet événement
GET /?parameter1=value1&parameter2=value2 HTTP/1.1 {"version":"v1","rawPath":"/","headers":{"Accept":"*/*","User-Agent":"CurlHttpClient"},"queryParameters":{"parameter1":"value1","parameter2":"value2"},"body":"","isBase64Encoded":true,"requestContext":{"accountId":"1327**********","domainName":"example.cn-hangzhou.fcapp.run","domainPrefix":"example","requestId":"1-67aee50c-****-**********","time":"2025-02-14T06:39:08Z","timeEpoch":"1739515148145","http":{"method":"GET","path":"/","protocol":"HTTP/1.1","sourceIp":"40.XX.XX.XX","userAgent":"CurlHttpClient"}}}

Pour envoyer cette requête depuis la CLI (remplacez https://example.cn-hangzhou.fcapp.run par l'URL de votre fonction) :

curl -v "https://example.cn-hangzhou.fcapp.run?parameter1=value1&parameter2=value2"

POST

Requête HTTP Objet événement
POST / HTTP/1,1
Content-Type: application/json
{"version":"v1","rawPath":"/","headers":{"Accept":"*/*","Content-Length":"20","Content-Type":"application/json","User-Agent":"curl/8.7.1"},"queryParameters":{},"body":"{\"message\": \"Hello\"}","isBase64Encoded":false,"requestContext":{"accountId":"1327**********","domainName":"example.cn-hangzhou.fcapp.run","domainPrefix":"example","requestId":"1-67aee50c-****-**********","time":"2025-02-14T06:39:08Z","timeEpoch":"1739515148145","http":{"method":"POST","path":"/","protocol":"HTTP/1.1","sourceIp":"40.XX.XX.XX","userAgent":"CurlHttpClient"}}}

Pour envoyer cette requête depuis la CLI (remplacez https://example.cn-hangzhou.fcapp.run par l'URL de votre fonction) :

curl -v -H "Content-Type: application/json" -d '{"message": "Hello"}' "https://example.cn-hangzhou.fcapp.run"
Pour forcer l'encodage Base64 du corps de la requête, définissez Content-Type sur application/x-www-form-urlencoded .

Structure de la réponse

Format

La sortie de votre fonction est analysée dans une structure de réponse avant d'être mappée vers la réponse HTTP :

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

Logique de mappage

Function Compute mappe la sortie de votre fonction vers la réponse HTTP selon que la sortie est un JSON valide contenant un champ statusCode.

**Lorsque la sortie est un JSON valide avec statusCode :**

Champ de la structure de réponse Réponse HTTP
statusCode Code d'état
headers["Content-Type"] En-tête Content-Type (par défaut application/json si absent)
body Corps de la réponse
isBase64Encoded Indique s'il faut décoder le corps en Base64 avant l'envoi (par défaut false si absent)

**Lorsque la sortie est un JSON valide sans statusCode, ou n'est pas du JSON :**

Function Compute utilise les valeurs par défaut suivantes :

Champ Valeur par défaut
statusCode 200
Content-Type application/json
body Sortie de la fonction telle quelle
isBase64Encoded false

Exemples de mappage de réponse

Les exemples suivants illustrent le flux de la sortie de fonction, de l'analyse jusqu'à la réponse HTTP finale.

Sortie pour une réponse chaîne

Sortie de la fonction Structure de réponse analysée Réponse HTTP (reçue par le client)
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

Hello World!

Sortie pour une réponse JSON

Sortie de la fonction Structure de réponse analysée Réponse HTTP (reçue par le client)
{"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

{"message": "Hello World!"}

Sortie pour une réponse personnalisée

Sortie de la fonction Structure de réponse analysée Réponse HTTP (reçue par le client)
{"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-Type: application/json
My-Custom-Header: Custom Value
X-Fc-Request-Id: 1-64f6dcb3-e787580749d3ba13b047ce14

{"message": "Hello world!"}

Décodage Base64

Si votre fonction renvoie un JSON valide avec isBase64Encoded défini sur true, Function Compute décode le body en Base64 avant de le mapper vers le corps de la réponse HTTP. Si le décodage échoue, Function Compute renvoie la valeur de body directement sans signaler d'erreur.

En-têtes de réponse

Function Compute ajoute automatiquement l'en-tête X-Fc-Request-Id à chaque réponse. Cet en-tête identifie de manière unique la requête et s'avère utile pour tracer les journaux et diagnostiquer les erreurs. À l'exception de X-Fc-Request-Id, Function Compute n'ajoute aucun autre en-tête de réponse par défaut.

Avertissement

Les en-têtes personnalisés avec le préfixe X-Fc- ne sont pas pris en charge. Les en-têtes suivants sont réservés par Function Compute et sont ignorés s'ils sont renvoyés par votre fonction :

  • connection

  • content-length

  • date

  • keep-alive

  • server

  • content-disposition

Gestion des erreurs

Les invocations via déclencheur HTTP et les invocations directes par API gèrent différemment les erreurs de fonction.

Type d'invocation Comportement en cas d'erreur Code d'état HTTP
Invocation directe par API Message d'erreur renvoyé dans le corps de la réponse 200
Déclencheur HTTP (URL de fonction) Message d'erreur masqué ; Internal Server Error renvoyé 502

Par exemple, une invocation directe par API rencontrant une erreur Python ModuleNotFoundError renvoie les détails d'erreur suivants :

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

Lorsqu'une fonction invoquée via un déclencheur HTTP rencontre une erreur, le client reçoit une réponse semblable à :

HTTP/1.1 502 Bad Gateway
Content-Disposition: attachment
Content-Type: application/json
X-Fc-Request-Id: 1-64f6df91-fe144d52e4fd27afe3d8dd6f
Content-Length: 21

Internal Server Error

Utilisez la valeur X-Fc-Request-Id pour rechercher les détails complets de l'erreur dans les journaux d'invocation de votre fonction.

Rubriques connexes

Si vous écrivez du code de fonction pour un environnement d'exécution intégré, consultez la documentation relative aux gestionnaires pour votre langage :