No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12 Días
16 Hrs
13 Min
45 Seg

El problema de CORS

11/23
Recursos

Cross Origin Resource Sharing (CORS) o en español, Intercambio de Recursos de Origen Cruzado, es un mecanismo de seguridad para la solicitud e intercambio de recursos entre aplicaciones con dominios diferentes. En pocas palabras, si las solicitudes HTTP se realizan desde un dominio diferente al dominio del backend, estas serán rechazadas.

Si eres desarrollador o desarrolladora front-end, tendrás problemas de CORS a lo largo de tu carrera y en múltiples oportunidades. Pero no te preocupes, es completamente normal y vamos a ver de qué se trata para evitar dolores de cabeza.

Cómo habilitar el dominio

Si CORS no está habilitado en el backend que estés consultando, las peticiones se bloquearán y verán un error en la consola de desarrollo del navegador.

Dependerá del equipo back end o de ti si también estás desarrollándolo, de habilitar el dominio del front-end desde el cual se ejecutarán las peticiones.

La habilitación del dominio suele ser muy sencilla y dependerá del lenguaje de programación y framework que estés utilizando, pero suele verse de la siguiente manera:

// MAL: Un * da permisos a cualquier dominio de realizar peticiones, es una muy mala práctica de seguridad.
cors({ origin: '*' })

// BIEN: Lo ideal es solo permitir los dominios que queremos autorizar a realizar peticiones.
cors({ origin: ['mydomain.com', 'app.mydomain.com'] })

Entornos donde se produce este error

Este error suele producirse principalmente en entornos de desarrollo o productivos reales, en servidores en la nube. No es tan habitual que suceda en entornos locales, ya que aplicaciones como Postman o Insomnia para realizar pruebas de petición HTTP, cambian el origen de las peticiones y evitan este problema.


Contribución creada por: Kevin Fiorentino.

Aportes 13

Preguntas 8

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

My aporte par aun caso particular:

En el caso que expone el profesor es cuando la URL es de la estructura: https://domain.com/api/

La forma en como se implementa funciona muy bien, incluso para cuando el valor que dice api es igual a otro string funciona sin problemas, como por ejemplo group, la URL sería: https://domain.com/group/

Hasta ahí todo sin problemas, pero que pasa cuando la URL contiene solo el dominio, por ejemplo:

https://domain.com

Busqué en varias fuentes y no había nada claro, quiero mostrar como yo manejé el problemas de CORDS para una URL que solo tenga el dominio.

Primero: La URL que dejo establecida en el eviroment o dentro del mismos servicio que voy a consumir el servicio http, la dejo de la forma: /api/ (que es el end point tal como el profe dice). Entonces el servicio queda de la siguiente forma:

import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from "@angular/common/http"
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class ImagesServicesService {

  constructor(private httpClient: HttpClient) { }

  url = "/api/" // Hay un proxy de desarrollo para evitar problemas de CORDS
  
  getInf(): Observable<any> {
      return this.httpClient.get(this.url)
  }
  
}

Segundo: en el proxy añado un parámetro adicional para reescribir el path de la URL. Queda de la siguiente forma:

{
  "/api/": {
    "target": "https://dominio.com",
    "secure": true,
    "logLevel": "debug",
    "changeOrigin": true,
    "pathRewrite": {
      "^/api": "/"
    }
  }
}

Con esto cuando haga una petición http el proxy me modifica la URL que solicito, me pone el target y modifica el api quitandolo.

Espero que sea de ayuda.

Esta clase era necesaria desde el curso de angular 8

Excelente clase, desde mis inicios, los CORS siempre han sido un dolor de cabeza, que solo se han resuelto con paños de agua tibia. Una explicación clara como esta ayuda inmensamente. Gracias 😄

Para el que le salga este error

[SELF_SIGNED_CERT_IN_CHAIN]

Lo solucioné colocando en “false” la propiedad secure del proxy, asi:

 {
  "/api/*": {
    "target": "https://young-sands-07814.herokuapp.com",
    "secure": false,
    "logLevel": "debug",
    "changeOrigin": true
  }
}

Entiendo que así se evita que se revise el certificado, pero ¿Alguien sabe una mejor forma de solucionar ese problema?

Todo por no tomar mis clases a tiempo xD
Recientemente tuve este problema, ya fue la segunda vez de hecho, un aplicativo angular se conectaba a un web api de .net framework, recuerdo que la solución fue una configuración en IIS, sin embargo, recientemente me pasó de nuevo, ésta vez más complicado, Igualmente un cliente de angular esta vez a un API en Net Core montada en un microservicio de kubernetes, Obviamente la petición de mi k8s venía del host de mi nodo máster y el microservicio se exponía desde un load balancer en el mismo clúster, pero aparte con https… Pff que lio, Aunque es muy buena la solución temporal que muestra el profe, efectivamente es un problema de backEnd y se debe de corregir desde el api, esta segunda vez que tuve el problema se tenía que agregar una política al ConfigureServices de la clase startUp

lo necesitaba, porque no me consumía la API que realice en Java, y este video lo estaba buscando, me quedo asi:

{
"/api/*":{
“target”:“https://localhost:8080”,
“secure”: true,
“logLevel”: “debug”

}

}

Le pedí a ChatGPT que me lo explicara CORS cómo si tuviera 12 años. Aquí pueden leer su respuesta

Muy buena explicacion sobre el problema y como resolverlo.

Exelente aporte los CORS siempre son una molestia … hasta hoy

Solución temporal para Cors con proxy

Una alternativa que podemos usar para este problema de CORS si no tenemos control sobre el servidor seria utilizar el proyecto Cors-anywhere que prácticamente haría lo mismo que postman /insomnia modificando el origen para que nuestra solicitud no sea bloqueada.

Algunas veces he tenido problemas CORS, me encanta la solución planteada por Angular. Sencilla y elegante.

Excelente video!!!