Tous les produits
Search
Centre de documentation

Function Compute:Fonctions web

Dernière mise à jour :Sep 09, 2026

Cette rubrique décrit les méthodes d'invocation, les limites et des exemples de code pour les fonctions dans un runtime personnalisé.

Informations générales

Un runtime personnalisé peut héberger votre serveur HTTP. Function Compute convertit les requêtes d'invocation de fonction en requêtes HTTP et les envoie à votre serveur HTTP. Il convertit ensuite les réponses de votre serveur HTTP en réponses d'invocation de fonction et les renvoie au client. Le schéma suivant illustre ce processus.

image

Vous pouvez invoquer une fonction de l'une des deux manières suivantes :

  • Appel HTTP (recommandé) : invoquez la fonction via HTTP, par exemple en utilisant un déclencheur HTTP ou un nom de domaine personnalisé.

  • Appel API : invoquez la fonction en appelant l'API InvokeFunction, par exemple en utilisant un SDK ou en déclenchant la fonction via une source d'événement.

Les différentes méthodes d'invocation entraînent des formats de requête et de réponse différents pour votre serveur HTTP.

Limites

  • Vous ne pouvez créer qu'un seul déclencheur HTTP pour chaque version ou alias d'une fonction. Pour plus d'informations, consultez Gérer les versions et Gérer les alias.

  • Limites des requêtes HTTP

    • Les en-têtes de requête ne prennent pas en charge les champs personnalisés commençant par x-fc- ni les champs personnalisés suivants :

      • connection

      • keep-alive

    • Si une requête dépasse les limites suivantes, un code d'état 400 et un code d'erreur InvalidArgument sont renvoyés.

      • Taille des en-têtes : la taille totale de toutes les clés et valeurs dans les en-têtes ne peut pas dépasser 8 Ko.

      • Taille du chemin : la taille totale du chemin, y compris tous les paramètres de requête, ne peut pas dépasser 4 Ko.

      • Taille du corps : la taille totale du corps de la requête pour une invocation synchrone ne peut pas dépasser 32 Mo. La taille totale du corps de la requête pour une invocation asynchrone ne peut pas dépasser 128 Ko.

  • Limites des réponses HTTP

    • Les en-têtes de réponse ne prennent pas en charge les champs personnalisés commençant par x-fc- ni les champs personnalisés suivants :

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • content-disposition:attachment

        Remarque

        Pour des raisons de sécurité, lorsque vous utilisez le domaine par défaut aliyuncs.com de Function Compute, le serveur ajoute systématiquement l'en-tête content-disposition: attachment aux en-têtes de réponse. Cet en-tête entraîne le téléchargement de la réponse en tant que pièce jointe dans le navigateur. Pour supprimer cette restriction, configurez un nom de domaine personnalisé.

    • Si une réponse dépasse les limites suivantes, un code d'état 502 et un code d'erreur BadResponse sont renvoyés.

      • Taille des en-têtes : la taille totale de toutes les clés et valeurs dans les en-têtes ne peut pas dépasser 8 Ko.

  • Autres remarques d'utilisation

    Vous pouvez mapper différents chemins d'accès HTTP vers votre fonction en liant un nom de domaine personnalisé. Pour plus d'informations, consultez Configurer un nom de domaine personnalisé.

Appel HTTP (recommandé)

Pour les invocations HTTP, Function Compute utilise le mode de transfert transparent. Il transmet la requête HTTP du client directement à votre serveur HTTP et renvoie la réponse du serveur HTTP directement au client. Certains champs réservés par le système ne sont pas transmis. Pour plus d'informations, consultez la section Limites.

En-têtes de requête

Lorsque vous invoquez une fonction à l'aide d'un déclencheur HTTP ou d'un nom de domaine personnalisé, Function Compute vous permet de configurer des en-têtes de requête pour contrôler le comportement de la requête. Le tableau suivant décrit les en-têtes de requête pris en charge.

Nom

Type

Obligatoire

Exemple

Description

X-Fc-Invocation-Type

String

Non

Sync

La méthode d'invocation. Pour plus d'informations, consultez Méthodes d'invocation. Valeurs valides :

  • Sync : invocation synchrone.

  • Async : invocation asynchrone.

X-Fc-Log-Type

String

Non

Tail

Les journaux à renvoyer dans la réponse. Valeurs valides :

  • Tail : renvoie les derniers 4 Ko de journaux générés par la requête actuelle.

  • None : ne renvoie pas les journaux de la requête. Il s'agit de la valeur par défaut.

En-têtes de réponse

Lorsque vous invoquez une fonction à l'aide d'un déclencheur HTTP ou d'un nom de domaine personnalisé, la réponse contient certains en-têtes de réponse ajoutés par défaut par Function Compute. Le tableau suivant décrit ces en-têtes de réponse.

Nom

Description

Exemple

X-Fc-Request-Id

L'ID de la requête d'invocation de la fonction.

dab25e58-9356-4e3f-97d6-f044c4****

Appel API

Pour les invocations utilisant l'API InvokeFunction, Function Compute convertit la requête InvokeFunction en une requête HTTP et l'envoie à votre serveur HTTP. Les règles de conversion sont les suivantes :

  • Le paramètre event de InvokeFunction est converti en corps de message de la requête HTTP.

  • path est /invoke.

  • method est POST.

  • L'en-tête de message Content-Type est application/octet-stream.

Function Compute convertit la réponse de votre serveur HTTP en réponse InvokeFunction et la renvoie au client. Les règles de conversion sont les suivantes :

  • Le corps de la réponse HTTP est converti en corps de la réponse InvokeFunction.

  • Les en-têtes de réponse HTTP et le code d'état sont perdus lors de la conversion.

Exemple de conversion de requête Invoke API

Requête Invoke

Requête HTTP (la requête reçue par le serveur HTTP)

Contenu de la requête Invoke API :

"hello world"
> POST /invoke HTTP/1,1
> Host: 21,0.X.X
> Content-Length: 11
> Content-Type: application/octet-stream

hello world

Exemple de sortie de réponse Invoke API

Réponse HTTP

Réponse Invoke

< HTTP/1,1 200 OK
< Date: Mon, 10 Jul 2025 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 11
< Connection: keep-alive

hello world
hello world
< HTTP/1,1 400 Bad Request
< Date: Mon, 10 Jul 2025 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 28
< Connection: keep-alive

{"errorMessage":"exception"}
{"errorMessage":"exception"}

Codes de réponse et en-têtes de réponse de Function Compute

Un runtime personnalisé est essentiellement un serveur HTTP que vous implémentez. Par conséquent, chaque invocation de fonction est une requête HTTP, et chaque réponse inclut un code de réponse et des en-têtes de réponse.

  • Code de réponse StatusCode

    • 200 : succès.

    • 404 : échec.

  • En-tête de réponse x-fc-status

    • 200 : succès.

    • 404 : échec.

Vous pouvez utiliser l'en-tête de réponse x-fc-status pour indiquer à Function Compute si la fonction a été exécutée avec succès.

  • Si vous ne définissez pas x-fc-status : Function Compute suppose par défaut que l'invocation a été exécutée avec succès. Cependant, votre fonction peut avoir rencontré une exception qui n'a pas été signalée à Function Compute. Function Compute considère l'exécution comme exempte d'erreur. Cela peut ne pas affecter votre logique métier, mais cela impacte la surveillance et l'observabilité. Le code suivant montre un exemple :

        print("FC Invoke Start RequestId: " + rid)
        data = request.stream.read()
        print("Path: " + path)
        print("Data: " + str(data))
        # Simulate an exception to trigger a runtime error
        raise Exception("mock exception")
        print("FC Invoke End RequestId: " + rid)
        return "Hello, World!"
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=9000)
  • Si vous définissez x-fc-status : si votre fonction rencontre une exception, vous pouvez utiliser l'en-tête de réponse x-fc-status pour signaler l'échec d'exécution à Function Compute, et les informations de la pile d'erreurs sont imprimées dans les journaux. Comme illustré dans l'exemple suivant, après avoir défini l'en-tête de réponse x-fc-status sur 404, Function Compute identifie l'invocation comme une exécution ayant échoué. Le type d'erreur est InvocationError et le résultat renvoyé est mock exception. L'exemple de code dans app.py est le suivant :

    @app.route('/', defaults={'path': ''})
    @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
    def hello_world(path):
        rid = request.headers.get(REQUEST_ID_HEADER)
        print("FC Invoke Start RequestId: " + rid)
        try:
            raise Exception("mock exception")
        except Exception as e:
            print("FC Invoke End RequestId: " + rid + ", Error: Unhandled Exception")
            print(str(e))
            return str(e), 404, [{"x-fc-status", "404"}]
Remarque

Dans la réponse HTTP renvoyée, nous vous recommandons de définir à la fois StatusCode et x-fc-status.

Exemple de code

Si un déclencheur est configuré pour la fonction, vous pouvez implémenter un serveur HTTP dans n'importe quel langage. Cette rubrique utilise Python comme exemple. L'exemple de code est le suivant.

Remarque

L'exemple de code dépend d'un environnement Python et de la bibliothèque Flask. Nous vous recommandons de sélectionner Web Function pour la méthode de création de fonction et Python 3.10 pour le runtime.

import os
from flask import Flask
from flask import request
REQUEST_ID_HEADER = 'x-fc-request-id'
app = Flask(__name__)
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def hello_world(path):
    rid = request.headers.get(REQUEST_ID_HEADER)
    data = request.stream.read()
    print("Path: " + path)
    print("Data: " + str(data))
    return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)

L'exemple de code est expliqué ci-dessous :

  • @app.route('/', defaults={'path': ''}) : la route par défaut, qui correspond au chemin racine.

  • @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']) : une route dynamique avec un paramètre de chemin. Elle peut gérer les requêtes GET, POST, PUT et DELETE. La valeur du paramètre de chemin est transmise à la fonction hello_world en tant qu'argument path.

  • rid = request.headers.get(REQUEST_ID_HEADER) : obtient la valeur du champ x-fc-request-id dans les en-têtes de requête.

  • data = request.stream.read() : lit le contenu de la requête et l'assigne à la variable data.

  • return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))] : renvoie un corps de réponse contenant « Hello, World! », définit le code d'état sur 200 et inclut un en-tête Function-Name.