Probador de CORS
Envía una petición real de origen cruzado desde tu navegador a cualquier URL, con tu propio método, cabeceras, cuerpo y modo de credenciales, y descubre si CORS la permite. Si falla, unas pruebas adicionales te indican si la causa es el preflight, las credenciales, la falta de la cabecera Access-Control-Allow-Origin o la red.
Última actualización:
Análisis de la petición
Origin enviado por tu navegador:
Pruebas
Respuesta
Inspecciona y corrige en el servidor
Los navegadores ocultan las cabeceras CORS a los scripts. Ejecuta esto con curl para ver exactamente lo que devuelve el servidor:
El servidor debe responder con cabeceras como estas (ajústalas a tus necesidades):
Cómo usar Probador de CORS
- Introduce la URL de la API y elige el método HTTP.
- Añade cabeceras y un cuerpo tal como los envía tu front end, por ejemplo Authorization o Content-Type: application/json.
- Elige el modo de credenciales: include envía cookies, lo que requiere cabeceras más estrictas en el servidor.
- Revisa el análisis de la petición para ver si el navegador enviará un preflight y haz clic en Enviar petición.
- Lee el veredicto y copia el comando curl y las cabeceras necesarias para corregir el servidor.
Las cabeceras de respuesta CORS explicadas
| Cabecera | Se envía en | Función |
|---|---|---|
Access-Control-Allow-Origin | Todas las respuestas | El origen autorizado a leer la respuesta, o * para cualquier origen (no con credenciales) |
Access-Control-Allow-Methods | Preflight | Métodos permitidos para la petición real, como GET, POST, PUT, DELETE |
Access-Control-Allow-Headers | Preflight | Cabeceras de petición que puede enviar la página, como authorization, content-type |
Access-Control-Allow-Credentials | Ambas | true permite que las peticiones con cookies o autenticación HTTP lean la respuesta |
Access-Control-Expose-Headers | Respuesta real | Cabeceras de respuesta adicionales que pueden leer los scripts, como x-total-count |
Access-Control-Max-Age | Preflight | Segundos que el navegador puede guardar en caché el resultado del preflight (los navegadores lo limitan; Chrome a 2 horas) |
Vary: Origin | Todas las respuestas | Evita que las cachés sirvan la respuesta CORS de un origen a otro origen |
Errores de CORS habituales y cómo solucionarlos
- No 'Access-Control-Allow-Origin' header is present: el servidor no envía ninguna cabecera CORS, o solo en las respuestas correctas. Añade la cabecera a todas las respuestas, incluidos los errores 4xx y 5xx.
- Response to preflight request doesn't pass access control check: la petición OPTIONS devuelve 401, 404 o 405. Gestiona OPTIONS antes de la autenticación y el enrutamiento y devuelve 204 con las cabeceras Allow.
- Request header field authorization is not allowed: añade el nombre de la cabecera a
Access-Control-Allow-Headers. - The value of the header must not be the wildcard '*' when credentials mode is 'include': devuelve el Origin de la petición (de una lista de permitidos) y añade
Access-Control-Allow-Credentials: true. - Redirect is not allowed for a preflight request: la URL redirige (por ejemplo de http a https o por falta de la barra final). Llama directamente a la URL final.
Ejemplo para nginx: add_header Access-Control-Allow-Origin $http_origin always; combinado con un map de orígenes permitidos, y if ($request_method = OPTIONS) { return 204; }. En Express, el middleware cors con { origin: ['https://app.example.com'], credentials: true } gestiona tanto el preflight como las respuestas reales.
Preguntas frecuentes
¿Qué es CORS?
Cross-Origin Resource Sharing (intercambio de recursos de origen cruzado) es la regla del navegador que decide si el JavaScript de un origen (esquema, host y puerto) puede leer una respuesta de otro origen. El servidor lo permite enviando cabeceras como Access-Control-Allow-Origin. Sin ellas, el navegador sigue enviando muchas peticiones, pero oculta la respuesta a la página.
¿Qué es una petición preflight?
Antes de una petición no simple, el navegador envía una petición OPTIONS con Access-Control-Request-Method y Access-Control-Request-Headers para pedir permiso. Una petición es simple solo si usa GET, HEAD o POST, tiene únicamente cabeceras permitidas como Accept y un Content-Type text/plain, multipart/form-data o application/x-www-form-urlencoded. Enviar JSON o una cabecera Authorization siempre provoca un preflight.
¿Por qué la herramienta no puede mostrar la cabecera Access-Control-Allow-Origin?
Los navegadores no dejan que los scripts lean la mayoría de las cabeceras de respuesta, incluidas las de CORS, y ante un fallo de CORS no dan ningún detalle. Por eso la herramienta hace pruebas adicionales para acotar la causa y te da un comando curl que muestra las cabeceras sin procesar que devuelve el servidor.
¿Por qué mi petición funciona en Postman o curl pero no en el navegador?
CORS solo lo aplican los navegadores. Postman, curl y el código del lado del servidor lo ignoran, así que la falta de la cabecera Access-Control-Allow-Origin solo aparece en el código de front end. Corrígelo en el servidor de la API o pasa la llamada por tu propio back end.
¿Puedo usar Access-Control-Allow-Origin: * con cookies?
No. Cuando la petición usa credenciales (cookies o autenticación HTTP), el servidor debe devolver el origen exacto y enviar Access-Control-Allow-Credentials: true. En ese caso el navegador rechaza un origen comodín. Añade también Vary: Origin para que las cachés guarden las respuestas por origen.
¿Qué origen usa esta prueba?
La petición se envía desde esta página, así que la cabecera Origin es freetoolcabin.com. Si tu API solo permite el origen de tu propio sitio, la prueba mostrará bloqueado aunque tu sitio funcione. Usa el comando curl con tu origen real para confirmarlo.
¿Mi petición pasa por FreeToolCabin?
No. La petición va directamente de tu navegador a la URL que introduces. No hay proxy y no se guarda nada. Evita pegar secretos de producción en las cabeceras en ordenadores compartidos.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.