¿Qué es CORS? Acceso Cross-Origin del Navegador Explicado
La API de Raspado Universal Sin Raspar recupera contenido web público permitido y puede renderizar JavaScript cuando CORS debe ser observado en una respuesta real.
Resumen
- CORS tiene un rol protocolar preciso. La Compartición de Recursos de Origen Cruzado, o CORS, es un mecanismo de encabezado HTTP que permite a un servidor indicar a un navegador qué otros orígenes pueden leer una respuesta a través de solicitudes impulsadas por script.
- CORS debe ser leído en la capa correcta. El transporte, la representación, la política del navegador y la autorización de la aplicación siguen siendo preocupaciones separadas.
- Los intermediarios pueden cambiar lo que un aplicativo observa. Los gateways, cachés, configuraciones predeterminadas del navegador y bibliotecas del cliente pueden añadir procesamiento entre los bytes de origen y los datos analizados.
- La validación necesita evidencia del contenido. Un estado o campo solo no prueba que la representación pública esperada ha llegado.
- La seguridad depende del alcance y la validación. La sintaxis del protocolo nunca otorga permiso para acceder a un recurso o confiar en un valor proporcionado por el llamador.
¿Qué es CORS?
La Compartición de Recursos de Origen Cruzado, o CORS, es un mecanismo de encabezado HTTP que permite a un servidor indicar a un navegador qué otros orígenes pueden leer una respuesta a través de solicitudes impulsadas por script. Un origen se define por esquema, host y puerto. CORS relaja la política de mismo origen del navegador para las respuestas aprobadas; no autentica usuarios, autoriza acciones comerciales o impide que clientes no navegadores envíen solicitudes HTTP.
La definición útil incluye tanto el mecanismo como su frontera. CORS afecta una parte específica de un intercambio, mientras que las responsabilidades adyacentes permanecen con HTTP, el navegador, el transporte seleccionado, la aplicación o el modelo de datos del servidor. Mantener esas capas separadas hace que los informes de errores sean reproducibles y evita que un cambio de configuración sea confundido con una decisión de control de acceso.
Para los desarrolladores de API, la primera pregunta es quién crea el valor o comportamiento. La siguiente pregunta es quién lo interpreta. La última pregunta es qué resultado observable prueba que la interpretación funcionó. Esas tres respuestas convierten un término de glosario en un contrato de interfaz comprobable.
Cómo un Navegador Toma una Decisión CORS
El script de la página llama a fetch o XMLHttpRequest para una URL cuyo origen difiere del origen de la página. El navegador añade un campo Origin que identifica el origen del llamador. Para algunas solicitudes envía la solicitud real directamente; para otras primero envía un pre-flight OPTIONS que describe el método y los campos no seguros previstos.
El servidor evalúa el origen y devuelve campos de respuesta de control de acceso. Access-Control-Allow-Origin nombra el origen permitido o, en casos elegibles no acreditados, utiliza un comodín. Otros campos pueden permitir métodos, campos de solicitud, credenciales o campos de respuesta seleccionados que el script de la página puede leer.
El navegador compara la respuesta con el contexto de la solicitud. Si la política no coincide, el script es bloqueado para leer la respuesta protegida, aunque el servidor puede haber procesado la solicitud HTTP. Esta distinción explica por qué una consola muestra un error CORS mientras que los registros del servidor muestran una solicitud entrante.
Las solicitudes acreditadas tienen reglas más estrictas. No se puede usar un origen comodín con credenciales de navegador, y el servidor debe permitir explícitamente las credenciales. Las reglas de SameSite de cookies y la autorización de la aplicación aún se aplican de forma independiente.
Los Campos CORS Que Definen Permiso
Los siguientes términos separan los componentes que a menudo se agrupan en una sola etiqueta. Léelos como interfaces entre participantes en lugar de como decoración en un rastro de red.
Origen
Identifica el esquema, host y puerto de la página solicitante; los navegadores lo adjuntan en solicitudes de origen cruzado relevantes.
Access-Control-Allow-Origin
Nombra el origen cuyo script puede leer la respuesta, o utiliza un comodín donde las reglas de credenciales lo permiten.
Access-Control-Allow-Methods
Lista los métodos aprobados para el contexto de la solicitud previa.
Access-Control-Allow-Headers
Lista los nombres de campos de solicitud no seguros que el servidor permite.
Access-Control-Allow-Credentials
Permite credenciales de navegador en el intercambio real de origen cruzado cuando las reglas de origen explícito también se aprueban.
Access-Control-Expose-Headers
Hace que los campos de respuesta seleccionados sean legibles para el script de la página más allá de los campos de respuesta en lista segura.
Por qué CORS es Importante en la Recolección de Datos Web
CORS puede cambiar qué bytes llegan, cómo esos bytes se interpretan o si el código del navegador puede observar el resultado. Un flujo de trabajo de colección debe ubicar ese efecto antes de cambiar herramientas. Registra la URL solicitada, la URL final, el estado de la respuesta, el tipo de representación, los campos de protocolo relevantes y un marcador de contenido esperado. Ese registro compacto distingue una página correcta de un mensaje de acceso, pantalla de consentimiento, objetivo de redirección, shell de aplicación vacío o codificación incompatible.
HTTP directo es la ruta de adquisición más simple cuando los datos requeridos existen en una respuesta renderizada por servidor abierta. Un navegador se vuelve relevante cuando el contenido aprobado depende de la ejecución de JavaScript, el estado administrado por el navegador, la navegación o la política de seguridad del navegador. Las dos rutas no deben ser forzadas a parecer idénticas: los navegadores gestionan cookies, compresión, redirecciones, CORS y almacenamiento de acuerdo con las reglas de la plataforma, mientras que un cliente directo expone un conjunto diferente de valores predeterminados.
La continuidad de sesión es importante cada vez que una respuesta establece estado para la siguiente solicitud. Mantén una secuencia autorizada dentro de un contexto de cliente delimitado, preserva la localidad y el origen de red requeridos, y evita mezclar estado de trabajos no relacionados. Un proxy cambia el origen de red; no reproduce encabezados, decodifica representaciones, ejecuta scripts o concede acceso a contenido restringido.
El análisis comienza solo después de la validación de la representación. Confirme el host final, la identidad canónica donde esté disponible, el tipo de medio, el estado de decodificación y el marcador comercial requerido antes de extraer los campos. Este orden previene que un analizador convierta un documento de error en registros vacíos que parecen técnicamente exitosos.
Los intermediarios merecen atención explícita. Una red de entrega de contenido puede seleccionar una variante codificada, una puerta de enlace puede responder OPTIONS, un caché puede reutilizar una respuesta negociada y un servidor de aplicaciones puede establecer cookies o campos de autorización. Comparar solo el código de la aplicación con la salida de la página final omite la capa que puede haber tomado la decisión.
La API de Scraping Universal Sin Scrap es relevante cuando un equipo necesita recuperación administrada de contenido público permitido, incluidas las páginas renderizadas por JavaScript. El contrato de adquisición aún debe definir el objetivo, los campos permitidos, la representación esperada, el marcador de aceptación y las condiciones de detención. La capacidad del producto no reemplaza los términos de la fuente, la revisión de privacidad o la validación a nivel de aplicación.
Configuraciones de CORS que coinciden con productos reales
CORS se gana un lugar en una arquitectura cuando cambia el comportamiento de un producto concreto, el requisito de compatibilidad o una decisión diagnóstica. Estos casos de uso describen primero el trabajo y segundo la característica del protocolo.
API de lectura pública
Un servicio puede permitir lecturas no acreditadas desde orígenes aprobados o todos los orígenes cuando los datos son genuinamente públicos.
Aplicación de una sola página
La API puede permitir el origen del frontend de producción y orígenes de desarrollo seleccionados.
API de cuenta acreditada
Una lista de permisos de origen explícita se empareja con soporte de credenciales y autorización del lado del servidor.
Metadatos de respuesta expuestos
El servidor puede exponer un campo limitado como un id de solicitud sin exponer todos los campos de respuesta.
Frontend multitenant
La política puede resolver un origen de inquilino registrado y rechazar valores no confiables reflejados.
Servicio de carga separado
El preflight puede aprobar el método requerido y el campo de contenido para un origen de carga dedicado.
CORS, política de mismo origen, CSRF y autenticación
CORS pertenece a una capa de HTTP y no debe confundirse con capas adyacentes. Una implementación sólida identifica qué componente selecciona el valor, qué componente puede cambiarlo y qué evidencia prueba que la representación final es correcta.
| Dimensión | CORS | Concepto relacionado o alternativo |
|---|---|---|
| Política de mismo origen | Base de seguridad del navegador | Restringe el acceso a scripts entre orígenes |
| CORS | Permiso de lectura opt-in del servidor | Relaja las restricciones seleccionadas del navegador |
| Defensa CSRF | Protege acciones que cambian el estado | Valida el contexto y la intención de la solicitud |
| Autenticación | Establece la identidad del llamador | Utiliza mecanismos de sesión o credenciales |
| Autorización | Verifica las operaciones permitidas | Aplica normas comerciales y de recursos |
Una comparación es útil solo si conserva los límites de las capas. Dos mecanismos pueden coexistir en una solicitud, y reemplazar uno no reemplaza automáticamente al otro. Documente el comportamiento seleccionado en términos de entradas, salida observable, estado de fallo y propiedad.
Errores de configuración de CORS y falsos arreglos
- Reflejando cada origen. Eco de entrada no validada puede otorgar acceso de lectura del navegador al origen de un atacante.
- Usando comodín con credenciales. Las solicitudes del navegador acreditadas requieren un origen permitido explícito en lugar de un permiso de comodín.
- Tratar CORS como autenticación. CORS regula el acceso a las respuestas del navegador; el servidor aún debe autenticar y autorizar cada operación.
- Añadiendo encabezados solo a respuestas exitosas. Los errores y las respuestas preflight también necesitan los campos de política requeridos para que el navegador exponga diagnósticos útiles.
- Usando no-cors para resolver el acceso. La respuesta opaca resultante no es una respuesta API normal legible y no otorga el permiso de servidor que falta.
- Olvidando la variación de caché. Las respuestas de origen dinámico deben tener en cuenta el origen en el comportamiento de almacenamiento en caché para que el permiso de un inquilino no se sirva a otro.
La mayoría de las fallas se vuelven más fáciles de diagnosticar después de eliminar suposiciones sobre lo que una biblioteca o un navegador hizo automáticamente. Capture un rastro mínimo, tache secretos y cambie una variable controlada a la vez. El objetivo es una explicación estable de la representación devuelta, no una colección de ajustes de encabezados no relacionados.
Un Diagnóstico CORS de Página a Origen
Esta secuencia funciona como una revisión de diseño antes del lanzamiento y como un diagnóstico de producción después de cambios de comportamiento. Mantiene la evidencia del protocolo conectada al resultado de la aplicación.
- Escriba el origen de la página y el origen objetivo como esquema, host y puerto.
- Inspeccione el panel de red del navegador para determinar si el intercambio fallido es preflight o una solicitud real.
- Revise el campo de solicitud de origen y el valor exacto de Access-Control-Allow-Origin en la respuesta.
- Para preflight, compare el método solicitado y los nombres de campos con las listas permitidas del servidor.
- Para credenciales, verifique el permiso de origen explícito, permiso de credenciales, reglas de cookies y autorización de la aplicación por separado.
- Verifique redirecciones y respuestas de puerta de enlace porque una capa diferente puede omitir los campos requeridos.
- Valide con el contexto del navegador real; un éxito en la línea de comandos no prueba que la política del navegador pase.
Termine la revisión guardando una pequeña muestra aceptada y una muestra rechazada con las mismas reglas de redacción. Los cambios futuros pueden compararse contra la identidad de página conocida, campos esperados y contenido decodificado en lugar de memoria o capturas de pantalla solamente.
Seguridad y Observabilidad para CORS
CORS participa en un camino de solicitud que puede cruzar navegadores, puertas de enlace, cachés y servidores de origen. Cada salto debe aceptar solo los valores que comprende, preservar los campos que deben sobrevivir y evitar copiar credenciales o datos personales en los registros. La sintaxis del protocolo no es autorización.
Los registros operativos deben capturar la URL solicitada, la URL final, el estado, el tipo de representación, los nombres de campos relevantes y un marcador de contenido limitado. Los cuerpos completos y los valores de credenciales rara vez son necesarios para un diagnóstico rutinario y pueden crear un riesgo innecesario de retención.
El comportamiento del navegador y el comportamiento directo de HTTP son superficies de prueba diferentes. CORS, almacenamiento de cookies, descompresión automática y manejo de redirecciones pueden ser realizados por el navegador o la biblioteca antes de que el código de la aplicación vea un resultado. Registre el cliente y sus valores predeterminados al comparar capturas.
Estándares que Definen CORS
el estándar Fetch del protocolo CORS define el procesamiento CORS del navegador actual. Esta fuente primaria fija el vocabulario y el límite utilizados en este artículo, mientras que el comportamiento de implementación aún necesita ser observado en el cliente y la implementación seleccionados.
La guía CORS de MDN explica intercambios simples y preflighted. Esta fuente primaria fija el vocabulario y el límite utilizados en este artículo, mientras que el comportamiento de implementación aún necesita ser observado en el cliente y la implementación seleccionados.
la especificación del origen web define el concepto de origen utilizado por la seguridad web. Esta fuente primaria fija el vocabulario y el límite utilizados en este artículo, mientras que el comportamiento de implementación aún necesita ser observado en el cliente y la implementación seleccionados.
La guía de política de mismo origen de MDN describe el límite del navegador que CORS puede relajar. Esta fuente primaria fija el vocabulario y el límite utilizados en este artículo, mientras que el comportamiento de implementación aún necesita ser observado en el cliente y la implementación seleccionados.
El Modelo Mental Correcto de CORS
CORS es un permiso de lectura de respuesta impuesto por el navegador controlado por los campos del servidor; complementa la autenticación, autorización, política de cookies y defensas contra suplantación de solicitudes en lugar de reemplazarlas.
Ponga esa regla en una prueba de aceptación. Indique qué participante envía la señal, qué participante la interpreta, qué intermediarios pueden alterar el camino y qué marcador de contenido prueba el éxito. Esto hace que CORS sea parte de un sistema observable en lugar de una etiqueta adjunta después de un fallo.
¿Listo para Validar una Respuesta Web Pública?
Use Scrapeless Universal Scraping API para recuperar contenido público aprobado y verificar el contrato de representación descrito en esta guía.
Regístrese hoy y obtenga $5 de crédito gratuito — sin tarjeta de crédito requerida.
Reclame su crédito de $5 →FAQ
¿CORS bloquea la solicitud para llegar al servidor?
No siempre. El navegador puede enviar una solicitud real y luego bloquear el script de la página para leer la respuesta. Un preflight fallido impide que la solicitud real asociada sea enviada.
¿Puede CORS proteger una API de clientes de línea de comandos?
No. CORS es impuesto por navegadores web. Los clientes HTTP directos pueden enviar solicitudes, por lo que la API debe imponer por sí misma la autenticación, autorización, validación y política de tasas.
¿Puede Access-Control-Allow-Origin configurarse para múltiples orígenes?
El campo de respuesta lleva un valor de origen permitido o un comodín elegible, no una lista de permitidos separada por comas. Los servidores que admiten varios orígenes evalúan el origen solicitado y devuelven el valor aprobado coincidente.
¿Por qué funciona una solicitud en curl pero falla en un navegador?
Un cliente de línea de comandos no impone la política de mismo origen del navegador. El navegador verifica los campos de CORS y puede enviar un preflight antes de exponer la respuesta al script.
¿Habilitar CORS previene CSRF?
No. CORS controla si el script del navegador puede leer una respuesta, mientras que CSRF se refiere a solicitudes no deseadas que cambian el estado hechas con la autoridad de un usuario. Use defensas dedicadas contra suplantación de solicitudes y autorización del servidor.