Pregunta ¿Cuál es el problema que CORS está tratando de resolver?


He estado leyendo sobre CORS y cómo funciona, pero estoy encontrando muchas cosas confusas. Por ejemplo, hay muchos detalles sobre cosas como

Usuario Joe está usando el navegador BrowserX para obtener datos de site.com,   que a su vez envía una solicitud a spot.com. Para permitir esto, spot tiene   encabezados especiales ... yada yada yada

Sin mucho conocimiento, no entiendo por qué los sitios web no permiten solicitudes desde algunos lugares. Quiero decir, existen para responder a las solicitudes, ¿no es así? ¿Por qué no se permiten ciertas personas de las solicitudes?

Realmente apreciaría una buena explicación (o un enlace a uno) del problema que CORS está hecho para resolver

Entonces la pregunta es,

Cuál es el problema CORS está resolviendo?


18
2017-12-08 19:22


origen


Respuestas:


El comportamiento predeterminado de los navegadores web que inician solicitudes desde una página a través de JavaScript (AKA AJAX) es que siguen el política del mismo origen. Esto significa que las solicitudes solo se pueden realizar a través de AJAX al mismo dominio (o subdominio). Las solicitudes a un dominio completamente diferente fallarán.

Esta restricción existe porque las solicitudes realizadas en otros dominios por su navegador llevarían su galletas lo que a menudo significa que estarás conectado al otro sitio. Entonces, sin el mismo origen, cualquier sitio podría alojar JavaScript que llamara a logout en stackoverflow.com por ejemplo, y lo desconectaría. Ahora imagine las complicaciones cuando hablamos de redes sociales, sitios bancarios, etc.

Por lo tanto, todos los navegadores simplemente restringen las llamadas de red basadas en secuencias de comandos a su propio dominio para hacerlo simple y seguro.

El Sitio X en www.x.com no puede realizar solicitudes AJAX al sitio Y en www.y.com, solo a * .x.com

Existen algunas alternativas conocidas (como JSONP que no incluye cookies en la solicitud), pero estas no son una solución permanente.

CORS permite que se realicen estas solicitudes entre dominios, pero solo cuando cada lado opta por el soporte CORS.


17
2017-12-08 19:25



Primero, hablemos de la misma política de origen. Voy a citar de una respuesta previa mía:

La política del mismo origen se inventó porque evita que el código de un sitio web acceda contenido restringido por credenciales en otro sitio. Las solicitudes de Ajax se envían por defecto con cualquier cookie de autenticación otorgada por el sitio de destino.

Por ejemplo, supongamos que accidentalmente cargo http://evil.com/, que envía una solicitud de http://mail.google.com/. Si el SOP no estaba en su lugar, y yo había iniciado sesión en Gmail, el script en evil.com podría ver mi bandeja de entrada. Si el sitio en evil.com quiere cargar mail.google.com sin mis cookies, solo puede usar un servidor proxy; los contenidos públicos de mail.google.com no son un secreto (pero el contenido de mail.google.com cuando se accede con mis cookies son un secreto).

(Tenga en cuenta que he dicho "contenido restringido por credenciales", pero también puede ser contenido restringido por topología cuando un sitio web solo es visible para ciertas direcciones IP.)

A veces, sin embargo, no es evil.com tratando de echar un vistazo a su bandeja de entrada. A veces, es solo un sitio web útil (por ejemplo, http://goodsite.foo) tratando de usar una API pública de otro origen (por ejemplo, http://api.example.com) Los programadores que trabajaron duro en api.example.com  querer todos los orígenes para acceder libremente a los contenidos de su sitio. En ese caso, el servidor API en api.example.com puede usar encabezados CORS para permitir goodsite.foo (o cualquier otro origen solicitante) para acceder a sus respuestas API.

Entonces, en resumen, asumimos por defecto que el acceso de origen cruzado es algo malo (piense en alguien que intente leer su bandeja de entrada), pero hay casos en que es bueno cosa (piense en un sitio web que intenta acceder a una API pública). CORS permite que el buen caso suceda cuando el sitio solicitado quiere que suceda.


9
2017-12-08 19:36



Existen razones de seguridad y privacidad para no permitir solicitudes desde cualquier lugar. Si visitó mi sitio web, no desea que mi código haga solicitudes a Facebook, reddit, su banco, eBay, etc. desde su navegador utilizando sus cookies, ¿verdad? Mi sitio podría hacer publicaciones, leer información, realizar pedidos, etc. en su nombre. O en mi nombre con tus cuentas.


1
2017-12-08 19:29