Todos los productos
Search
Centro de documentos

Function Compute:Descripción general de los disparadores HTTP

Última actualización: Sep 06, 2026

Los disparadores HTTP le permiten invocar una función de Function Compute mediante solicitudes HTTP o HTTPS estándar. Representan la vía más rápida para construir servicios web y API en Function Compute: no generan sobrecarga de codificación, no requieren gestionar una puerta de enlace adicional y son compatibles con cualquier herramienta de pruebas HTTP o servicio que admita webhooks.

Funcionamiento

Un disparador HTTP expone su función como un endpoint HTTP. Cuando llega una solicitud, Function Compute la autentica (si se configuró), la pasa a su función y devuelve la respuesta HTTP al llamador.

Métodos HTTP compatibles: GET, POST, PUT, DELETE, HEAD, PATCH y OPTIONS.

Ejemplo de un controlador mínimo para una función web 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);
};

El objeto event contiene la solicitud HTTP completa (ruta, encabezados, cuerpo y método). Para enviar una respuesta HTTP, devuelva un objeto con statusCode, headers y body.

Notas de uso

Antes de desarrollar con disparadores HTTP, tenga en cuenta los siguientes comportamientos.

Riesgo de acceso anónimo

Si establece Authentication Method en No Authentication, cualquier persona que conozca la URL del endpoint podrá invocar su función. Para aplicar una autorización personalizada, valide el encabezado Authorization dentro del código de su función. Para obtener más detalles, consulte Configure signature-based authentication for HTTP triggers.

Restricción para descargar archivos APK

A partir del 10 de junio de 2024, los nuevos disparadores HTTP bloquean las descargas de archivos APK (tipo MIME application/vnd.android.package-archive) a través de endpoints de red pública. Estas solicitudes devuelven el código de estado HTTP 400. Para obtener más detalles, consulte How to ensure your HTTP trigger's public endpoint returns .apk files correctly.

Rotación de VIP

Function Compute rota periódicamente las direcciones IP virtuales (VIP) asociadas a los endpoints públicos y privados. Codificar las VIP de forma fija provoca interrupciones del servicio y no está cubierto por el acuerdo de nivel de servicio (SLA) de Function Compute. Utilice un nombre de dominio personalizado con configuración CNAME para garantizar un acceso estable. Para obtener más detalles, consulte Configure a custom domain name.

Comportamiento del dominio predeterminado y del adjunto

Cuando utiliza el dominio predeterminado aliyuncs.com, Function Compute añade content-disposition: attachment a todas las respuestas. Esto obliga a los navegadores a descargar las respuestas como archivos en lugar de mostrarlas. Configure un nombre de dominio personalizado para eliminar este comportamiento.

Límites

Límites de los disparadores

  • Se permite un máximo de un disparador HTTP por versión o alias de función. Consulte Version management y Alias management.

  • Los nombres de dominio integrados sirven únicamente para pruebas; su estabilidad no está garantizada. No los utilice en servicios de producción. Si va a exponer su función al público, vincule primero un nombre de dominio personalizado con registro ICP. Consulte Configure a custom domain name.

Límites de las solicitudes

Límite

Valor

Tamaño del encabezado (todas las claves y valores)

8 KB

Tamaño de la ruta (incluidos los parámetros de consulta)

4 KB

Tamaño del cuerpo: invocación síncrona

32 MB

Tamaño del cuerpo: invocación asíncrona

Consulte Function execution resource limits

Si supera los límites de encabezado, ruta o cuerpo en las invocaciones síncronas, se devuelve el código de estado HTTP 400 con el código de error InvalidArgument.

Encabezados de solicitud no compatibles: cualquier encabezado que comience con x-fc-, además de connection y keep-alive.

Límites de las respuestas

Límite

Valor

Tamaño del encabezado (todas las claves y valores)

8 KB

Si supera el límite del encabezado de respuesta, se devuelve el código de estado HTTP 502 con el código de error BadResponse.

Encabezados de respuesta no compatibles: cualquier encabezado que comience con x-fc-, además de connection, content-length, date, keep-alive, server, upgrade y content-disposition:attachment.

Métodos de invocación

Invocación síncrona

De manera predeterminada, los disparadores HTTP utilizan la invocación síncrona. La función procesa la solicitud y devuelve el resultado antes de que se cierre la conexión. Consulte Synchronous invocation.

Invocación asíncrona

En la invocación asíncrona, Function Compute almacena la solicitud y devuelve de inmediato el código de estado HTTP 202, sin esperar a que la función termine. Cualquier código de estado distinto de 202 indica que la invocación terminó con errores. Consulte Retry mechanism para conocer el manejo de fallos.

Existen dos formas de invocar de manera asíncrona:

  • Asincronía a nivel de solicitud: añada el encabezado "X-Fc-Invocation-Type": "Async" a cualquier solicitud HTTP. Consulte Asynchronous invocation.

  • Tarea asíncrona: tras configurar una tarea asíncrona para su función, añada el encabezado "X-Fc-Async-Task-Id": "<task-id>" para especificar el identificador de la invocación. Consulte Asynchronous task.

La respuesta incluye el identificador de la solicitud en el encabezado; por ejemplo: "X-Fc-Request-Id": "80bf7****281713e1". Para consultar todos los encabezados de solicitud compatibles, vea Invoke a function.

Autenticación y autorización

Los llamadores externos deben superar las comprobaciones de autenticación de Function Compute antes de acceder a su función mediante un disparador HTTP. Métodos compatibles:

Intercambio de recursos de origen cruzado (CORS)

Function Compute admite tres formas de gestionar las solicitudes de intercambio de recursos de origen cruzado (CORS), cada una con distintas ventajas en cuanto a costo, complejidad y flexibilidad.

Función

CORS configurado por API (recomendado)

CORS predeterminado

CORS definido por el usuario (código)

¿Se factura la solicitud preflight?

No se factura (la gestiona la puerta de enlace)

Posibles cargos

Se factura (se activa la función)

Cambios de código necesarios

Ninguna

Ninguna

Altos

Versiones de API compatibles

Solo FC 3.0

Todas las versiones

Todas las versiones

Complejidad de configuración

Baja (configuración única)

Ninguna

Alta (debe manejar OPTIONS)

Comportamiento predeterminado de CORS

De manera predeterminada, Function Compute replica los encabezados CORS según la solicitud recibida. En las solicitudes simples (sin preflight), la respuesta incluye lo siguiente:

  • Access-Control-Allow-Origin: copiado del encabezado Origin de la solicitud.

  • Access-Control-Allow-Credentials: true.

  • Access-Control-Expose-Headers: encabezados definidos por Function Compute.

Gestión de CORS en el código de la función

Para las solicitudes simples, establezca los encabezados Access-Control-Allow-* directamente en su respuesta.

En las solicitudes no simples, el navegador envía una solicitud preflight OPTIONS antes de la solicitud real. Agregue OPTIONS a los métodos permitidos de su disparador HTTP y gestione esta petición en el código de su función.

<details> <summary>Ejemplo en 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>Ejemplo en 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>Ejemplo en 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 configurado por API

El CORS configurado por API está disponible como vista previa por invitación. Para habilitarlo, contact us y proporcione el identificador de su cuenta de Alibaba Cloud (UID).

El CORS configurado por API es una función de la capa de puerta de enlace. Configure las directivas CORS directamente en un disparador HTTP o en un nombre de dominio personalizado, sin necesidad de incluir lógica CORS en el código de su función.

Beneficios principales:

  • Sin cambios en el código: desacopla el manejo de CORS de la lógica de negocio.

  • Menor costo: la puerta de enlace gestiona directamente las solicitudes preflight OPTIONS, por lo que no se ejecuta ninguna instancia de la función.

  • Gestión centralizada: aplique las directivas CORS a nivel de disparador o de dominio.

  • Menor latencia: la puerta de enlace devuelve las respuestas preflight sin invocar su función.

Alcance:

  • Solo funciones de FC 3.0 (versión de API 2023-03-30).

  • Aplica a los disparadores HTTP (incluidos los dominios de prueba integrados) y a los nombres de dominio personalizados vinculados.

Configúrelo mediante la Update trigger o la API Update custom domain name.

Parámetros de configuración de CORS

Parámetro

Tipo

Descripción

Predeterminado

Restricción

allowOrigins

Array

Orígenes con permiso para acceder a los recursos

—

Máximo 100 elementos, cada uno de ≤ 256 caracteres. Admite * o https://*.

allowMethods

Array

Métodos HTTP permitidos

Métodos del disparador

No incluya OPTIONS, ya que la puerta de enlace gestiona el preflight automáticamente.

allowHeaders

Array

Encabezados de solicitud personalizados permitidos desde los navegadores

—

Máximo 50 elementos. Admite *.

exposeHeaders

Array

Encabezados de respuesta expuestos a los navegadores

Valor predeterminado del sistema

Máximo 50 elementos.

allowCredentials

Boolean

Indica si se permiten cookies y credenciales en las solicitudes de origen cruzado

false

Si es true, allowOrigins no puede ser *.

maxAge

Integer

Duración de la caché para las respuestas preflight, en segundos

3600

Rango: 0–86400.

Valores para allowOrigins:

  • *: permite todos los orígenes (solo cuando allowCredentials es false).

  • https://*: permite todos los orígenes que comienzan con https://.

  • Dominio específico: https://example.com.

  • Varios dominios: ["https://example.com", "https://app.example.com"].

  • No se admiten comodines de subdominio (por ejemplo, https://*.example.com). Enumere todos los dominios de forma explícita.

Valores para allowMethods:

  • Métodos HTTP estándar: GET, POST, PUT, DELETE, PATCH y HEAD.

  • *: permite todos los métodos.

  • No incluya OPTIONS, ya que la puerta de enlace gestiona automáticamente todas las solicitudes preflight.

Procesamiento de solicitudes en la puerta de enlace

Solicitudes preflight (OPTIONS)

La puerta de enlace valida los encabezados Origin, Access-Control-Request-Method y Access-Control-Request-Headers:

  • Validación exitosa: devuelve 204 No Content con los encabezados CORS configurados. No invoca la función.

  • Validación fallida:

    • El origen coincide, pero otros encabezados no: la puerta de enlace establece los encabezados CORS básicos y reenvía la solicitud a la función.

    • El origen no coincide: no se establecen encabezados CORS. La solicitud se reenvía a la función.

Solicitudes simples (GET, POST, HEAD, etc.)

La puerta de enlace solo valida el encabezado Origin:

  • Validación exitosa: inyecta Access-Control-Allow-Origin y otros encabezados CORS en la respuesta, y reenvía la solicitud a la función.

  • Validación fallida: no inyecta encabezados CORS, pero reenvía la solicitud a la función.

Prioridad

Cuando varios métodos de gestión de CORS aplican a la misma ruta, la puerta de enlace los aplica en este orden:

  1. CORS configurado por API (prioridad más alta): si está habilitado, la puerta de enlace aplica esta configuración primero.

  2. CORS predeterminado: si el CORS configurado por API está deshabilitado, la puerta de enlace usa el comportamiento de réplica predeterminado integrado.

  3. CORS definido por la función: los encabezados que devuelve su función se combinan con los resultados anteriores.

Disparador HTTP frente a disparador de API Gateway

Tanto los disparadores HTTP como los de API Gateway permiten crear aplicaciones web.

Disparador HTTP

Disparador de API Gateway

Ideal para

Una ruta ligera y directa de HTTP a la función

Escenarios donde necesita funciones de API Gateway, como la gestión de tráfico o la transformación de solicitudes

Enrutamiento de rutas

Asigne rutas URL a su función mediante la vinculación de un nombre de dominio personalizado

Configure Function Compute como backend de la API

Documentación

Configure a custom domain name

Use Function Compute as an API backend service

Los disparadores HTTP ofrecen estas ventajas sobre los de API Gateway:

  • Son más rápidos de configurar y más fáciles de depurar, ya que no requieren configuración adicional de la puerta de enlace.

  • Eliminan la sobrecarga de codificación y decodificación JSON, pues transmiten las solicitudes y respuestas directamente.

  • Son compatibles con las herramientas estándar de pruebas HTTP.

  • Se integran fácilmente con servicios que admiten webhooks, como la recuperación de origen de CDN y Simple Message Queue (antes MNS).

Preguntas frecuentes

¿Dónde configuro el puerto de escucha?

Configure el puerto de escucha únicamente cuando cree la función como Web Function.

Mi función tarda demasiado. ¿Cómo lo soluciono?

La causa depende del patrón observado:

Mi función devuelve el código de estado HTTP 499. ¿Cómo lo gestiono?

Un código 499 significa que el cliente cerró la conexión antes de que la función respondiera. Tras un error 499, la instancia de la función se reinicia. Configure comprobaciones de estado para evitar reinicios innecesarios. Consulte Why does the function instance restart after a client 499 error?.

Si los tiempos de espera del cliente son la causa raíz, traslade la lógica que consume más tiempo a una función independiente e invoquela de forma asíncrona, o bien cambie a invocación asíncrona desde el lado del cliente.

Actualicé la configuración de mi función. ¿Cuándo surte efecto?

Las actualizaciones de configuración surten efecto cuando finaliza la ejecución actual. Las solicitudes en curso siguen usando la configuración anterior hasta que terminan; las nuevas solicitudes usan la configuración actualizada.

Como alternativa, elimine la función actual y cree una nueva con la configuración actualizada.

¿Por qué falla la llamada a mi API después de agregar OPTIONS a allowMethods?

No agregue OPTIONS a corsConfig.allowMethods. La puerta de enlace gestiona automáticamente todas las solicitudes preflight. Incluir OPTIONS de forma manual genera errores en el procesamiento de las solicitudes.

Después de configurar el CORS por API, las solicitudes OPTIONS devuelven 200 en lugar de 204. ¿Por qué?

Confirme que su cuenta tiene acceso a la vista previa por invitación. Si el plugin de la puerta de enlace no está completamente activado, esta recurre al comportamiento predeterminado de CORS, el cual devuelve 200 y reenvía la solicitud a su función.

**¿Puedo usar comodines de subdominio en allowOrigins, por ejemplo *.example.com?**

No. No se admiten comodines de subdominio. Enumere de forma explícita todos los dominios necesarios en el arreglo allowOrigins, o use https://* para coincidir de manera amplia con orígenes HTTPS.

El código de mi función también establece encabezados CORS. ¿Habrá conflictos?

No. Los encabezados generados por la puerta de enlace y los devueltos por la función se combinan. Si existen duplicados, los navegadores utilizan el primer valor válido. Las aplicaciones existentes seguirán funcionando durante la migración.