Problemas entre dominios y cómo nginx maneja 403 ACAO

1. ¿Qué es dominio cruzado? Solución de dominio cruzado

Debido a las restricciones de la política del mismo origen del navegador. La misma política de origen (Same origin policy) es una convención, que es la función de seguridad central y más básica del navegador. Si falta la misma política de origen, las funciones normales del navegador pueden verse afectadas. Se puede decir que la Web está construida sobre la base de la política del mismo origen, y el navegador es solo una implementación de la política del mismo origen. La política del mismo origen evita que los scripts JavaScript de un dominio interactúen con el contenido de otro dominio. El llamado mismo origen (es decir, en el mismo dominio) significa que dos páginas tienen el mismo protocolo (protocol), host (host) y número de puerto (port) .La URL
de la página actual es diferente, lo que significa cruzar -dominio

La siguiente tabla se utiliza para mostrar visualmente los tipos de dominios cruzados

URL de la página actual La URL de la página solicitada Ya sea entre dominios razón
http://www.test.com/ http://www.test.com/index.html No Mismo origen (mismo protocolo, nombre de dominio, número de puerto)
http://www.test.com/ https://www.test.com/index.html dominio cruzado El protocolo es diferente (http/https)
http://www.test.com/ http://www.baidu.com/ dominio cruzado El nombre de dominio principal es diferente (test/baidu)
http://www.test.com/ http://blog.test.com/ dominio cruzado Diferentes subdominios (www/blog)
http://www.test.com:8080/ http://www.test.com:7001/ dominio cruzado Diferentes números de puerto (8080/7001)

2. Condiciones de falla

Cuando se produce un error de dominio cruzado 403, el encabezado No 'Access-Control-Allow-Origin' está presente en el recurso solicitado. Debe configurar los parámetros del encabezado de respuesta para el servidor Nginx: Medidas de manejo de Nginx, modificar la configuración de
Nginx

        location / {
    
       
        proxy_pass  http://127.0.0.1:8010;
        add_header 'Access-Control-Allow-Origin' '*';
	    add_header 'Access-Control-Allow-Credentials' 'true';
     	add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
	    add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
	    add_header Content-Security-Policy "upgrade-insecure-requests;connect-src *";

            }

3. Detalles de configuración

  1. El servidor Access-Control-Allow-Origin
    no puede cruzar dominios de forma predeterminada. Después de configurar el servidor Nginx Access-Control-Allow-Origin *, significa que el servidor puede aceptar todas las fuentes de solicitud (Origen), es decir, aceptar todas las solicitudes entre dominios.
  2. Access-Control-Allow-Headers es para evitar los siguientes errores:
    Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

Este error indica que el valor del tipo de contenido de la solicitud actual no es compatible. De hecho, fue causado por nosotros al iniciar una solicitud de tipo "aplicación/json". Aquí se trata de un concepto: solicitud de verificación previa (solicitud de verificación previa), consulte la introducción de "solicitud de verificación previa" a continuación.

  1. Access-Control-Allow-Methods es para evitar los siguientes errores:
    Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

4. Agregue un retorno 204 a OPCIONES para lidiar con el error de que Nginx aún rechaza el acceso al enviar una solicitud POST.
Al enviar una "solicitud de verificación previa" (presentada a continuación), se debe usar el método OPCIONES, por lo que el servidor debe permitir este método.

5. Forzar el reemplazo de todas las solicitudes HTTP por solicitudes HTTPS

4. Solicitud de verificación previa

De hecho, la configuración anterior involucra un estándar W3C: CROS, el nombre completo es intercambio de recursos de origen cruzado (Cross-origin resource sharing), que se propuso para resolver solicitudes de origen cruzado.

El estándar Cross-Origin Resource Sharing (CORS) agrega un nuevo conjunto de campos de encabezado HTTP que permiten a los servidores declarar qué sitios de origen tienen permiso para acceder a qué recursos. Además, la especificación requiere que para aquellos métodos de solicitud HTTP que pueden tener efectos secundarios en los datos del servidor (especialmente solicitudes HTTP que no sean GET o solicitudes POST con ciertos tipos MIME), el navegador debe usar primero el método OPTIONS para iniciar una solicitud de verificación previa. (solicitud de verificación previa), para saber si el servidor permite la solicitud de dominio cruzado. Una vez que el servidor confirma el permiso, se inicia la solicitud HTTP real. En la devolución de la solicitud de verificación previa, el servidor también puede notificar al cliente si debe llevar credenciales de identidad (incluidas las cookies y los datos relacionados con la autenticación HTTP).
De hecho, la solicitud cuyo campo Content-Type es application/json es la solicitud POST mencionada anteriormente con ciertos tipos MIME. CORS estipula que los Content-Types que no pertenecen a los siguientes tipos MIME son todas solicitudes de verificación previa:

application/x-www-form-urlencoded
multipart/form-data
text/plain

Por lo tanto, la solicitud de aplicación/json agregará una solicitud de "comprobación previa" antes de la comunicación oficial, y esta solicitud de "comprobación previa" traerá la información del encabezado.

Access-Control-Request-Headers: Content-Type:

OPTIONS /api/test HTTP/1.1
Origin: http://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type

… Omitir algunos
Cuando el servidor responde, si la información del encabezado devuelto no contiene Access-Control-Allow-Headers: Content-Type, significa que no se acepta el Content-Type no predeterminado. es decir, se produce el siguiente error:

Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

Parte del contenido del artículo se transfiere desde:
https://segmentfault.com/a/1190000012550346
https://blog.csdn.net/qq_38128179/article/details/84956552

Supongo que te gusta

Origin blog.csdn.net/qq_35855396/article/details/116456348
Recomendado
Clasificación