CORS con CARTERO


89

Este tema se ha preguntado un par de veces, pero todavía no entiendo algo:

Cuando leo respuestas sobre

Sin encabezado 'Access-Control-Allow-Origin'

cuestión, se dice que un ajuste se debe establecer en el servidor solicitado con el fin de permitir que varios dominios: add_header 'Access-Control-Allow-Origin' '*';.

Pero, por favor, dígame por qué cuando le pregunta al cartero (que es un cliente), funciona como un encanto y tengo una respuesta del servidor solicitado

Gracias


24
Postman no se preocupa por SOP, es una herramienta de desarrollo, no un navegador.
Musa

2
@Musa Ok, si se trata de un problema del navegador (cliente), ¿por qué debería modificar algo en el servidor?
IsraGab

7
Es el servidor que le dice al navegador que está bien ( CORS ) o no que un sitio determinado acceda a su contenido y el navegador lo respeta
Musa

Yo tengo exactamente la misma pregunta. ¿Cómo se puede hacer eso programáticamente, en este caso con un electrón?
mluis

8
La verdadera pregunta aquí es cómo configurar POSTMAN para imitar el comportamiento del navegador donde se envía primero una solicitud ORIGIN. En esencia, cómo hacer que POSTMAN se comporte como un navegador porque necesitamos probar para asegurarnos de que nuestras API estén configuradas correctamente. Entonces, ¿qué pasa si la API funciona desde POSTMAN y se rompe debido a CORS desde el navegador? Significa que la API es inútil.
Chris Love

Respuestas:


50

Como lo comenta @Musa, parece que el motivo es que:

Al cartero no le importa SOP, es una herramienta de desarrollo, no un navegador

Por cierto, aquí tienes una extensión de Chrome para que funcione en su navegador (esta es para Chrome, pero puede encontrarla para FF o Safari).

Marque aquí si desea obtener más información sobre Cross-Origin y por qué funciona para las extensiones.


5
Entonces, ¿cómo protejo el acceso a mis rutas API desde herramientas como Postman? Por ejemplo, una API que requiere una verificación de captcha. Pero si se accede directamente desde Postman, se omite la verificación de captcha
Sadman Muhib Samyo

5
El enlace a la extensión está roto.
jayarjo

La misma pregunta, además de esto, ¿cómo puede una extensión hacer que rompa la política de origen único?
Iván Cortés Romero

El enlace a la extensión de Chrome está roto
OhadR

44

Si utiliza un sitio web y completa un formulario para enviar información (su número de seguro social, por ejemplo), desea asegurarse de que la información se envíe al sitio al que cree que se envía. Por lo tanto, los navegadores se crearon para decir, de forma predeterminada, 'No envíe información a un dominio que no sea el que se está visitando'.

Con el tiempo, eso se volvió demasiado limitante, pero la idea predeterminada todavía permanece en los navegadores. No permita que la página web envíe información a un dominio diferente. Pero todo esto es una comprobación del navegador. Chrome y Firefox, etc. tienen un código integrado que dice "antes de enviar esta solicitud, vamos a verificar que el destino coincida con la página que se está visitando".

Postman (o CURL en la línea cmd) no tiene esos controles incorporados. Estás interactuando manualmente con un sitio para tener control total sobre lo que estás enviando.


2
Más precisamente, el cartero no envía una solicitud XmlHttp que se verificaría, sino una llamada de red de nivel superior (como abrir la URL en una nueva pestaña del navegador) para que no se
active

El navegador no está comprobando que su sitio no envíe datos a otro dominio: si el sitio del otro dominio permite todos los orígenes, su navegador está 100% de acuerdo con eso. Es lo contrario, está protegiendo el otro dominio, en caso de que su sitio use sus recursos sin estar autorizado.
XouDo

35

CORS(Uso compartido de recursos entre orígenes) y SOP(Política del mismo origen) son configuraciones del lado del servidor que los clientes deciden hacer cumplir o no .

Relacionado con los clientes

  • La mayoría de los navegadores lo aplican para evitar problemas relacionados con los CSRFataques.
  • A la mayoría de las herramientas de desarrollo no les importa .

10

Si bien todas las respuestas aquí son una muy buena explicación de lo que es cors, la respuesta directa a su pregunta sería debido a las siguientes diferencias cartero y navegador.

Navegador: envía una OPTIONSllamada para verificar el tipo de servidor y obtener los encabezados antes de enviar cualquier solicitud nueva al punto final de la API. Donde busca Access-Control-Allow-Origin. Teniendo esto en cuentaAccess-Control-Allow-Origin encabezado solo especifica qué ORÍGENES CRUZADOS están permitidos, aunque por defecto el navegador solo permitirá el mismo origen.

Cartero: Envía directa GET, POST, PUT, DELETEetc. solicitud sin la comprobación de qué tipo de servidor es y conseguir la cabecera Access-Control-Allow-Originmediante el uso de OPTIONSllamada al servidor.


"Envía una llamada a OPTIONS para verificar el tipo de servidor y obtener los encabezados antes de enviar cualquier solicitud nueva al punto final de la API". Eso no es cierto. Solo lo hace para solicitudes no simples.
Quentin

1

Generalmente, Postman se usa para depurar y se usa en la fase de desarrollo. Pero en caso de que quiera bloquearlo incluso del cartero, intente esto.

    const referrer_domain = "[enter-the-domain-name-of-the-referrer]"
    //check for the referrer domain
    app.all('/*', function(req, res, next) {
      if(req.headers.referer.indexOf(referrer_domain) == -1){
        res.send('Invalid Request')
      }

      next();
    });

agregue el código en su archivo con el enrutador. Si tiene un archivo con "enrutadores", agregue el código en la parte superior del archivo. El mismo archivo donde tiene: const express = require ('express') const app = express (); const cors = require ('cors');
samceena

edítelo app.jssi lo usa node app.jspara ejecutar el servidor.
Bharath Pabba

¿Puede eso proteger su servidor de ddos?
SuperUberDuper

-1

Utilice el complemento de cartero de navegador / Chrome para comprobar el CORS / SOP como un sitio web. En su lugar, utilice la aplicación de escritorio para evitar estos controles.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.