Les déclencheurs HTTP permettent d'invoquer une fonction Function Compute via des requêtes HTTP ou HTTPS standard. Ils constituent le moyen le plus rapide de créer des services web et des API sur Function Compute : aucune surcharge d'encodage, aucune passerelle supplémentaire à gérer et une compatibilité totale avec tout outil de test HTTP ou service prenant en charge les webhooks.
Fonctionnement
Un déclencheur HTTP expose votre fonction sous la forme d'un endpoint HTTP. Lorsqu'une requête arrive, Function Compute l'authentifie (si cette option est configurée), puis transmet la requête à votre fonction et renvoie la réponse HTTP correspondante à l'appelant.
Méthodes HTTP prises en charge : GET, POST, PUT, DELETE, HEAD, PATCH et OPTIONS.
Exemple de gestionnaire de fonction web minimal en Node.js :
exports.handler = (event, context, callback) => {
const request = JSON.parse(event);
const response = {
statusCode: 200,
headers: { 'Content-Type': 'text/plain' },
body: 'Hello from Function Compute'
};
callback(null, response);
};
L'objet event contient l'intégralité de la requête HTTP (chemin, en-têtes, corps, méthode). Pour envoyer une réponse HTTP, renvoyez un objet comprenant statusCode, headers et body.
Remarques d'utilisation
Avant de développer avec des déclencheurs HTTP, prenez connaissance des comportements suivants.
Risque lié à l'accès anonyme
Si vous définissez Authentication Method sur No Authentication, toute personne disposant de l'URL de l'endpoint peut invoquer votre fonction. Pour appliquer une autorisation personnalisée, validez l'en-tête Authorization dans le code de votre fonction. Pour plus d'informations, consultez Configurer l'authentification par signature pour les déclencheurs HTTP.
Restriction de téléchargement des fichiers APK
Depuis le 10 juin 2024, les déclencheurs HTTP nouvellement créés bloquent le téléchargement des fichiers APK (type MIME application/vnd.android.package-archive) via les endpoints du réseau public. Les requêtes renvoient le code d'état HTTP 400. Pour plus d'informations, consultez Comment garantir que l'endpoint public de votre déclencheur HTTP renvoie correctement les fichiers .apk.
Rotation des adresses VIP
Function Compute fait tourner périodiquement les adresses IP virtuelles (VIP) associées aux endpoints publics et privés. Le codage en dur des VIP entraîne des interruptions de service non couvertes par l'accord de niveau de service (SLA) de Function Compute. Utilisez un nom de domaine personnalisé avec une configuration CNAME pour assurer un accès stable. Pour plus d'informations, consultez Configurer un nom de domaine personnalisé.
Comportement du domaine par défaut et des pièces jointes
Lorsque vous utilisez le domaine par défaut aliyuncs.com, Function Compute ajoute l'en-tête content-disposition: attachment à toutes les réponses. Cela force les navigateurs à télécharger les réponses sous forme de fichiers au lieu de les afficher. Configurez un nom de domaine personnalisé pour désactiver ce comportement.
Limites
Limites des déclencheurs
Un seul déclencheur HTTP maximum est autorisé par version ou alias de fonction. Consultez Gestion des versions et Gestion des alias.
Les noms de domaine intégrés sont réservés aux tests ; leur stabilité n'est pas garantie. Ne les utilisez pas pour des services en production. Pour les services exposés publiquement, associez un nom de domaine personnalisé avec dépôt ICP avant d'exposer votre fonction. Consultez Configurer un nom de domaine personnalisé.
Limites des requêtes
| Limite | Valeur |
|---|---|
| Taille des en-têtes (toutes les clés + valeurs) | 8 Ko |
| Taille du chemin (y compris les paramètres de requête) | 4 Ko |
| Taille du corps — invocation synchrone | 32 Mo |
| Taille du corps — invocation asynchrone | Consultez Limites des ressources d'exécution des fonctions |
Le dépassement des limites d'en-tête, de chemin ou de corps pour les invocations synchrones renvoie le code d'état HTTP 400 avec le code d'erreur InvalidArgument.
En-têtes de requête non pris en charge : tout en-tête commençant par x-fc-, ainsi que connection et keep-alive.
Limites des réponses
| Limite | Valeur |
|---|---|
| Taille des en-têtes (toutes les clés + valeurs) | 8 Ko |
Le dépassement de la limite des en-têtes de réponse renvoie le code d'état HTTP 502 avec le code d'erreur BadResponse.
En-têtes de réponse non pris en charge : tout en-tête commençant par x-fc-, ainsi que connection, content-length, date, keep-alive, server, upgrade et content-disposition:attachment.
Méthodes d'invocation
Invocation synchrone
Par défaut, les déclencheurs HTTP utilisent l'invocation synchrone. La fonction traite la requête et renvoie le résultat avant la fermeture de la connexion. Consultez Invocation synchrone.
Invocation asynchrone
Dans le cadre d'une invocation asynchrone, Function Compute persiste la requête et renvoie immédiatement le code d'état HTTP 202, sans attendre la fin de l'exécution de la fonction. Tout code d'état autre que 202 indique un échec de l'invocation. Consultez Mécanisme de nouvelle tentative pour la gestion des échecs.
Deux méthodes permettent d'invoquer de manière asynchrone :
Mode asynchrone au niveau de la requête : Ajoutez l'en-tête
"X-Fc-Invocation-Type": "Async"à n'importe quelle requête HTTP. Consultez Invocation asynchrone.Tâche asynchrone : Après avoir configuré une tâche asynchrone pour votre fonction, ajoutez l'en-tête
"X-Fc-Async-Task-Id": "<task-id>"pour spécifier l'ID d'invocation. Consultez Tâche asynchrone.
La réponse inclut l'ID de la requête dans l'en-tête, par exemple : "X-Fc-Request-Id": "80bf7****281713e1". Pour consulter la liste complète des en-têtes de requête pris en charge, reportez-vous à Invoquer une fonction.
Authentification et autorisation
Les appelants externes doivent réussir les vérifications d'authentification de Function Compute avant d'accéder à votre fonction via un déclencheur HTTP. Méthodes prises en charge :
Partage des ressources entre origines multiples (CORS)
Function Compute propose trois méthodes pour gérer les requêtes de partage de ressources entre origines multiples (CORS), chacune présentant des compromis différents en termes de coût, de complexité et de flexibilité.
| Fonctionnalité | CORS configuré par API (recommandé) | CORS par défaut | CORS défini par l'utilisateur (code) |
|---|---|---|---|
| Facturation des requêtes préliminaires ? | Non facturées (gérées par la passerelle) | Frais potentiels | Facturées (fonction déclenchée) |
| Modifications de code requises | Aucune | Aucune | Importantes |
| Versions d'API prises en charge | FC 3.0 uniquement | Toutes les versions | Toutes les versions |
| Complexité de configuration | Faible (configuration unique) | Aucune | Élevée (gestion obligatoire de OPTIONS) |
Comportement CORS par défaut
Par défaut, Function Compute renvoie les en-têtes CORS en se basant sur la requête reçue. Pour les requêtes simples (sans phase préliminaire), la réponse comprend :
Access-Control-Allow-Origin: copié depuis l'en-têteOriginde la requêteAccess-Control-Allow-Credentials:trueAccess-Control-Expose-Headers: en-têtes définis par Function Compute
Gestion du CORS dans le code de la fonction
Pour les requêtes simples, définissez les en-têtes Access-Control-Allow-* directement dans votre réponse.
Pour les requêtes non simples, le navigateur envoie une requête OPTIONS préliminaire avant la requête réelle. Ajoutez OPTIONS aux méthodes autorisées de votre déclencheur HTTP et gérez cette requête dans le code de votre fonction.
<details> <summary>Exemple Node.js</summary>
exports.handler = (event, context, callback) => {
const method = JSON.parse(event).requestContext.http.method;
if (method === 'OPTIONS') {
const fcResponse = {
statusCode: 204,
headers: {
'Access-Control-Allow-Origin': 'http://www.fc.com',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Max-Age': '3600'
},
body: ''
};
callback(null, fcResponse);
} else {
callback(null, {
statusCode: 200,
body: 'hello world'
});
}
};
</details>
<details> <summary>Exemple Python</summary>
import json
def handler(event, context):
evt = json.loads(event)
method = evt.get('requestContext', {}).get('http', {}).get('method', '')
if method == 'OPTIONS':
return {
'statusCode': 204,
'headers': {
'Access-Control-Allow-Origin': 'http://www.fc.com',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Max-Age': '3600'
},
'body': ''
}
return {
'statusCode': 200,
'body': 'hello world'
}
</details>
<details> <summary>Exemple Go</summary>
package main
import (
"context"
"encoding/json"
)
type HttpRequest struct {
RequestContext struct {
Http struct {
Method string `json:"method"`
} `json:"http"`
} `json:"requestContext"`
}
type HttpResponse struct {
StatusCode int `json:"statusCode"`
Headers map[string]string `json:"headers"`
Body string `json:"body"`
}
func Handler(ctx context.Context, event []byte) (*HttpResponse, error) {
var req HttpRequest
if err := json.Unmarshal(event, &req); err != nil {
return nil, err
}
if req.RequestContext.Http.Method == "OPTIONS" {
return &HttpResponse{
StatusCode: 204,
Headers: map[string]string{
"Access-Control-Allow-Origin": "http://www.fc.com",
"Access-Control-Allow-Methods": "POST",
"Access-Control-Allow-Headers": "Content-Type, Authorization",
"Access-Control-Max-Age": "3600",
},
Body: "",
}, nil
}
return &HttpResponse{StatusCode: 200, Body: "hello world"}, nil
}
</details>
CORS configuré par API
Le CORS configuré par API est disponible en tant qu'aperçu sur invitation. Pour l'activer, contactez-nous et fournissez l'ID de votre compte Alibaba Cloud (UID).
Le CORS configuré par API est une fonctionnalité de la couche passerelle. Configurez les politiques CORS directement sur un déclencheur HTTP ou un nom de domaine personnalisé, sans aucune logique CORS dans le code de votre fonction.
Principaux avantages :
Aucune modification de code : Découplage de la gestion CORS et de la logique métier.
Coûts réduits : La passerelle gère directement les requêtes
OPTIONSpréliminaires, ce qui évite l'exécution d'une instance de fonction.Gestion centralisée : Application des politiques CORS au niveau du déclencheur ou du domaine.
Latence réduite : La passerelle renvoie les réponses préliminaires sans invoquer votre fonction.
Périmètre :
Fonctions FC 3.0 uniquement (version d'API
2023-03-30)S'applique aux déclencheurs HTTP (y compris les domaines de test intégrés) et aux noms de domaine personnalisés associés
Configurez cette fonctionnalité à l'aide de l'API Update trigger ou Update custom domain name.
Paramètres de configuration CORS
| Paramètre | Type | Description | Valeur par défaut | Contrainte |
|---|---|---|---|---|
allowOrigins |
Tableau | Origines autorisées à accéder aux ressources | — | 100 éléments maximum, chacun ≤ 256 caractères. Prend en charge * ou https://*. |
allowMethods |
Tableau | Méthodes HTTP autorisées | Méthodes du déclencheur | N'incluez pas OPTIONS : la passerelle gère automatiquement les requêtes préliminaires. |
allowHeaders |
Tableau | En-têtes de requête personnalisés autorisés depuis les navigateurs | — | 50 éléments maximum. Prend en charge *. |
exposeHeaders |
Tableau | En-têtes de réponse exposés aux navigateurs | Valeur par défaut du système | 50 éléments maximum. |
allowCredentials |
Booléen | Autorisation ou non des cookies et identifiants dans les requêtes inter-origines | false |
Si true, allowOrigins ne peut pas être *. |
maxAge |
Entier | Durée de mise en cache des réponses préliminaires, en secondes | 3600 |
Plage : 0–86400. |
Valeurs pour allowOrigins :
*: Autorise toutes les origines (uniquement lorsqueallowCredentialsestfalse).https://*: Autorise toutes les origines commençant parhttps://.Domaine spécifique :
https://example.com.Domaines multiples :
["https://example.com", "https://app.example.com"].Les caractères génériques de sous-domaine (par exemple,
https://*.example.com) ne sont pas pris en charge. Répertoriez explicitement tous les domaines.
Valeurs pour allowMethods :
Méthodes HTTP standard :
GET,POST,PUT,DELETE,PATCH,HEAD.*: Autorise toutes les méthodes.N'incluez pas
OPTIONS: la passerelle gère automatiquement toutes les requêtes préliminaires.
Traitement des requêtes par la passerelle
Requêtes préliminaires (OPTIONS)
La passerelle valide les en-têtes Origin, Access-Control-Request-Method et Access-Control-Request-Headers :
Validation réussie : Renvoie
204 No Contentavec les en-têtes CORS configurés. La fonction n'est pas invoquée.-
Échec de la validation :
L'origine correspond mais pas les autres en-têtes : La passerelle définit les en-têtes CORS de base, puis transfère la requête à la fonction.
L'origine ne correspond pas : Aucun en-tête CORS n'est défini. La requête est transférée à la fonction.
Requêtes simples (GET, POST, HEAD, etc.)
La passerelle valide uniquement l'en-tête Origin :
Validation réussie : Injecte
Access-Control-Allow-Originet d'autres en-têtes CORS dans la réponse. Transfère la requête à la fonction.Échec de la validation : N'injecte pas d'en-têtes CORS. Transfère tout de même la requête à la fonction.
Priorité
Lorsque plusieurs méthodes de gestion CORS s'appliquent au même chemin, la passerelle les applique dans l'ordre suivant :
CORS configuré par API (priorité la plus élevée) : Si activé, la passerelle applique cette configuration en premier.
CORS par défaut : Si le CORS configuré par API est désactivé, la passerelle utilise le comportement d'écho par défaut intégré.
CORS défini par la fonction : Les en-têtes renvoyés par votre fonction sont fusionnés avec les résultats ci-dessus.
Déclencheur HTTP vs déclencheur API Gateway
Les déclencheurs HTTP et les déclencheurs API Gateway permettent tous deux de créer des applications web.
| Déclencheur HTTP | Déclencheur API Gateway | |
|---|---|---|
| Idéal pour | Chemin léger et direct de HTTP vers la fonction | Lorsque vous avez besoin des fonctionnalités d'API Gateway telles que la gestion du trafic ou la transformation des requêtes |
| Routage des chemins | Mappez les chemins d'URL à votre fonction en associant un nom de domaine personnalisé | Configurez Function Compute comme backend d'API |
| Documentation | Configurer un nom de domaine personnalisé | Utiliser Function Compute comme service backend d'API |
Les déclencheurs HTTP offrent les avantages suivants par rapport aux déclencheurs API Gateway :
Configuration plus rapide et débogage simplifié, sans configuration de passerelle supplémentaire.
Aucune surcharge d'encodage ou de décodage JSON : les déclencheurs HTTP transmettent directement les requêtes et les réponses.
Compatibilité avec les outils de test HTTP standard.
Intégration aisée avec les services prenant en charge les webhooks, tels que l'extraction d'origine CDN et Simple Message Queue (anciennement MNS).
FAQ
Pourquoi mon appel d'API échoue-t-il après avoir ajouté OPTIONS à allowMethods ?
N'ajoutez pas OPTIONS à corsConfig.allowMethods. La passerelle gère automatiquement toutes les requêtes préliminaires. L'inclusion manuelle de OPTIONS provoque des erreurs de traitement des requêtes.
Après avoir configuré le CORS par API, les requêtes OPTIONS renvoient 200 au lieu de 204. Pourquoi ?
Confirmez que votre compte a bien obtenu l'accès à l'aperçu sur invitation. Si le plugin de passerelle n'est pas entièrement activé, celle-ci revient au comportement CORS par défaut, qui renvoie 200 et transfère la requête à votre fonction.
**Puis-je utiliser des caractères génériques de sous-domaine dans allowOrigins, par exemple *.example.com ?**
Non. Les caractères génériques de sous-domaine ne sont pas pris en charge. Répertoriez explicitement tous les domaines requis dans le tableau allowOrigins, ou utilisez https://* pour une correspondance large des origines HTTPS.
Le code de ma fonction définit également des en-têtes CORS. Y aura-t-il des conflits ?
Non. Les en-têtes générés par la passerelle et ceux renvoyés par la fonction sont fusionnés. En cas de doublons, les navigateurs utilisent la première valeur conforme. Les applications existantes continuent de fonctionner pendant la migration.