Tous les produits
Search
Centre de documentation

Function Compute:Fonctions web

Dernière mise à jour :Aug 23, 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 transmet à votre serveur HTTP. Il transforme ensuite les réponses de votre serveur HTTP en réponses d'invocation de fonction avant de les renvoyer au client. Le schéma suivant illustre ce processus.

image

Limites

  • Vous ne pouvez créer qu'un seul déclencheur HTTP par version ou alias d'une fonction. Pour plus d'informations, consultez les sections 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 suivants :

      • connection

      • keep-alive

    • Si une requête dépasse les limites suivantes, le système renvoie un code d'état 400 et un code d'erreur InvalidArgument.

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

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

      • Taille du corps : la taille totale du corps de la requête pour une invocation synchrone ne doit pas dépasser 32 Mo. Pour une invocation asynchrone, elle ne doit 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 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 automatiquement l'en-tête content-disposition: attachment aux en-têtes de réponse. Cet en-tête force le navigateur à télécharger la réponse sous forme de pièce jointe. Pour lever cette restriction, configurez un nom de domaine personnalisé.

    • Si une réponse dépasse les limites suivantes, le système renvoie un code d'état 502 et un code d'erreur BadResponse.

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

  • Autres remarques d'utilisation

    Vous pouvez mapper différents chemins d'accès HTTP vers votre fonction en associant un nom de domaine personnalisé. Pour plus d'informations, consultez la section 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 au client. Certains champs réservés au système ne sont pas transmis. Pour plus d'informations, consultez la section Limites.

En-têtes de requête

Lorsque vous appelez une fonction via un déclencheur HTTP ou 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 la section 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 4 derniers 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 appelez une fonction via un déclencheur HTTP ou un nom de domaine personnalisé, la réponse contient certains en-têtes 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 effectuées via l'API InvokeFunction, Function Compute convertit la requête InvokeFunction en 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 du message de la requête HTTP.

  • path correspond à /invoke.

  • method correspond à POST.

  • L'en-tête de message Content-Type est défini sur 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 (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 constitue une requête HTTP, et chaque réponse inclut un code de réponse ainsi que 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.

Utilisez l'en-tête de réponse x-fc-status pour indiquer à Function Compute si l'exécution de la fonction a réussi.

  • 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. Toutefois, votre fonction peut avoir rencontré une exception non signalée à Function Compute. Ce dernier considère alors l'exécution comme exempte d'erreur. Cela peut ne pas affecter votre logique métier, mais cela impacte la surveillance et l'observabilité. L'exemple de code suivant illustre ce cas :

        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 : en cas d'exception dans votre fonction, vous pouvez utiliser l'en-tête de réponse x-fc-status pour signaler l'échec d'exécution à Function Compute. Les informations de la pile d'erreurs sont alors imprimées dans les journaux. Comme le montre l'exemple ci-dessous, après avoir défini l'en-tête de réponse x-fc-status sur 404, Function Compute identifie l'invocation comme ayant échoué. Le type d'erreur est InvocationError et le résultat renvoyé est mock exception. Voici l'exemple de code dans app.py :

    @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 à titre d'exemple. Le code exemple est présenté ci-dessous.

Remarque

Le code exemple dépend d'un environnement Python et de la bibliothèque Flask. Nous vous recommandons de sélectionner Web Function comme méthode de création de fonction et Python 3.10 comme 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)

Le code exemple est expliqué comme suit :

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

  • @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']) : route dynamique avec un paramètre de chemin. Elle gère 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.