Qué es CORS: la regla del navegador detrás de cada error cross-origin
Solicitudes simples, preflights y credenciales, con pruebas en curl.
Leer la guíaAyuda de CDN.com.tr
Añada Access-Control-Allow-Origin y las demás cabeceras CORS a las respuestas de una regla de entrega, deje que su origen responda a las solicitudes OPTIONS de preflight y permita en el WAF los métodos que usa su API.
Caché, seguridad, WAF y purga
Añada Access-Control-Allow-Origin y las demás cabeceras CORS a las respuestas de una regla de entrega, deje que su origen responda a las solicitudes OPTIONS de preflight y permita en el WAF los métodos que usa su API.
https://app.example.com, o * para archivos que cualquiera puede cargar.OPTIONS en esas rutas con 200 o 204.Lo que envía el navegador decide dónde se hace el trabajo.
GET simple: no hay preflight, y Access-Control-Allow-Origin en la regla es todo lo que necesitan. Mientras la optimización de imágenes de toda la cuenta está activada, los archivos .jpg, .jpeg y .png toman las cabeceras de respuesta de la regla más antigua del dominio, no las de la regla de su ruta.PUT, PATCH, DELETE: el navegador envía antes un preflight; su origen lo responde, y la regla puede añadir las cabeceras CORS a esa respuesta.*, más Access-Control-Allow-Credentials true.Elija una sola fuente por cabecera.
always.Vary: Origin.Ejemplo para una API en /api/ a la que llama una aplicación web. Escriba una cabecera por línea; un valor con espacios va entre comillas dobles.
/api/.Access-Control-Allow-Origin https://app.example.com, Access-Control-Allow-Methods "GET, POST, PUT, OPTIONS", Access-Control-Allow-Headers "Content-Type, Authorization" y Access-Control-Max-Age 600.Resultado esperado: La regla muestra una etiqueta como +4 cabeceras de respuesta, y la página muestra Publicado en cuanto el edge la sirve.
Necesario mientras el WAF de todo el sitio está activado y la API usa métodos además de GET, HEAD, POST y OPTIONS.
PUT, PATCH o DELETE según lo que necesite su API, mantenga OPTIONS marcado y pulse Save.Resultado esperado: El panel confirma el guardado, y el cambio se propaga en 1-2 minutos.
curl no aplica CORS, así que muestra exactamente lo que responde el edge.
Origin.OPTIONS con Origin, Access-Control-Request-Method y Access-Control-Request-Headers.Resultado esperado: La solicitud simple lleva una sola access-control-allow-origin. El preflight responde 200 o 204 con el origen, los métodos y las cabeceras permitidos.
curl -s -o /dev/null -D - -H 'Origin: https://app.example.com' https://www.example.com/api/items | grep -iE '^(HTTP|access-control)'
curl -s -o /dev/null -D - -X OPTIONS -H 'Origin: https://app.example.com' -H 'Access-Control-Request-Method: PUT' -H 'Access-Control-Request-Headers: content-type' https://www.example.com/api/items | grep -iE '^(HTTP|access-control|x-mt-blocked-by)'
Una aplicación web en app.example.com carga fuentes, JSON o respuestas de API desde www.example.com, y el navegador las bloquea con un error CORS.
Nombre-Cabecera valor, sin dos puntos, por ejemplo Access-Control-Allow-Origin https://app.example.com. Un valor con espacios va entre comillas dobles.Access-Control-* para estas rutas, marque el mismo nombre en Quitar cabeceras, para que el navegador reciba un único valor.PUT, PATCH o DELETE y el WAF de todo el sitio está activado, márquelos en Métodos HTTP permitidos en la página Security.always se añade también a las respuestas 4xx y 5xx de su origen.OPTIONS de preflight van a su origen y nunca se almacenan en caché. Cuando su origen responde a un preflight con 200 o 204, las cabeceras de la regla se añaden a esa respuesta; un preflight respondido con 401, 404 o 405 llega al navegador sin ellas, salvo que la línea termine en always. En una regla con Protección con contraseña o una Lista de IP permitidas, el edge responde por sí mismo con 401 o 403 a un preflight que no deja pasar.Access-Control-Allow-Origin: con dos valores, el navegador rechaza la respuesta.Access-Control-Allow-Origin según el sitio que hace la solicitud, también debe enviar Vary: Origin. El edge mantiene separadas esas variantes siempre que Mantener una sola copia en caché diga lo que diga la cabecera Vary esté desactivado en la regla.Access-Control-Request-Method y Access-Control-Request-Headers en Quitar cabeceras: los nombres que se marcan ahí también se quitan de las solicitudes enviadas a su origen, y su origen lee estas dos para responder a un preflight.GET, HEAD, POST y OPTIONS están permitidos de forma predeterminada. Una solicitud con un método que no está en la lista recibe un 403 sin cabeceras CORS y con X-MT-Blocked-By: cdn-edge-security, que el navegador notifica como un error CORS..jpg, .jpeg y .png reciben las cabeceras de respuesta de la regla más antigua del dominio, no las de la regla de su ruta: ponga la cabecera CORS de esas imágenes en esa regla, con un Access-Control-Allow-Origin fijo. Cuando esa regla más antigua es la regla de comprobación de certificados, no reciben cabeceras de ninguna regla.El edge pasa las solicitudes OPTIONS a su origen y nunca las almacena en caché, así que su origen debe responder al preflight con 200 o 204. Las cabeceras de respuesta de la regla se añaden a esa respuesta: las cabeceras CORS pueden venir de la regla, y su origen solo tiene que aceptar OPTIONS. La excepción: en una regla con Protección con contraseña o una Lista de IP permitidas, el propio edge responde con 401 o 403 a un preflight que no deja pasar.
Una regla añade el mismo valor a todas las respuestas: * o un origen, como https://app.example.com. Para permitir varios orígenes, deje que su aplicación envíe el origen que corresponda junto con Vary: Origin, y no ponga Access-Control-Allow-Origin en la regla. Las solicitudes con cookies u otras credenciales necesitan un origen concreto, no *.
Empiece por el estado de la solicitud que falla en el panel de red del navegador. Un 403 con X-MT-Blocked-By: cdn-edge-security viene del edge: búsquelo en los registros de WAF y, si falta su método, añádalo en Métodos HTTP permitidos. Por defecto, cualquier otro 4xx o 5xx llega sin las cabeceras de la regla, así que corrija primero esa respuesta. Una línea que termina en always, como Access-Control-Allow-Origin https://app.example.com always, se añade también a las respuestas 4xx y 5xx de su origen. Después compruebe que llega exactamente una Access-Control-Allow-Origin y que coincide con el sitio que hace la solicitud, esquema incluido.
Mientras el WAF de todo el sitio está activado, abra la página Security, marque los métodos en Métodos HTTP permitidos y pulse Save; el cambio se propaga en 1-2 minutos. Métodos de solicitud permitidos, en la pestaña Seguridad de Reglas de entrega, abre la misma tarjeta. Mantenga OPTIONS marcado: los navegadores lo envían para los preflights.