Cómo resolver problemas entre dominios
El artículo original solo se guarda para uso futuro: /p/98d4bc7565b2
Dominio cruzado se refiere al acceso entre nombres de dominio. Las siguientes situaciones son dominio cruzado:
.Si el nombre de dominio y el puerto son los mismos pero las rutas de solicitud son diferentes, no es un dominio cruzado, como por ejemplo:
www.jd.com/item
www.jd.com/goods
p>Los problemas entre dominios no necesariamente causan problemas entre dominios.
Debido a que los problemas entre dominios son una limitación de seguridad de los navegadores en las solicitudes ajax: una solicitud ajax iniciada por una página solo puede ser una ruta con el mismo nombre de dominio que la página actual, lo que puede prevenir eficazmente el intercambio cruzado. ataques al sitio.
Por lo tanto: los problemas entre dominios son una limitación de ajax.
Pero esto aporta estabilidad a nuestro desarrollo, y en el entorno de producción real, definitivamente habrá muchos servidores interactuando entre sí, y las direcciones y puertos pueden ser diferentes. ¿Qué debemos hacer?
Actualmente existen tres soluciones de dominio cruzado de uso común:
Aquí usaremos la solución de dominio cruzado cors.
CORS es un estándar del W3C, su nombre completo es "Intercambio de recursos entre orígenes".
Permite que el navegador emita solicitudes XMLHttpRequest a servidores de orígenes cruzados, superando así la limitación de que AJAX solo se puede utilizar desde el mismo origen.
CORS debe ser compatible tanto con el navegador como con el servidor. Actualmente, todos los navegadores admiten esta función y el navegador IE no puede ser inferior a IE10.
Los navegadores dividirán las solicitudes ajax en dos categorías y sus planes de procesamiento son ligeramente diferentes: solicitudes simples y solicitudes especiales.
Siempre que se cumplan las dos condiciones siguientes al mismo tiempo, se trata de una solicitud simple. :
(1) El método de solicitud es uno de los siguientes tres métodos:
(2) La información del encabezado HTTP no excede los siguientes campos:
Cuando el navegador descubre que la solicitud ajax es una solicitud simple, llevará un campo en el encabezado de la solicitud: Origen
Origen indicará a qué dominio pertenece la solicitud actual (protocolo + nombre de dominio + puerto. ). El servicio decidirá si permite el dominio cruzado en función de este valor.
Si el servidor permite solicitudes entre dominios, la siguiente información debe incluirse en el encabezado de respuesta devuelto:
Nota:
Si desea operar cookies para solicitudes entre dominios, deben cumplir tres condiciones:
Si no cumple con las condiciones de una solicitud simple, el navegador la considerará como una solicitud especial, por ejemplo, la solicitud El método es PUT.
Una solicitud especial agregará una solicitud de consulta HTTP antes de la comunicación formal, lo que se denomina solicitud de "verificación previa".
El navegador primero pregunta al servidor si el nombre de dominio de la página web actual está en la lista de permisos del servidor y qué verbos HTTP y campos de información de encabezado se pueden utilizar. Solo cuando se reciba una respuesta positiva el navegador emitirá una solicitud XMLHttpRequest formal; de lo contrario, se informará un error.
Un ejemplo de una solicitud de "verificación previa":
En comparación con la solicitud simple, además de Origen, hay dos encabezados más:
La solicitud previa del servicio -solicitud recibida Verifique la solicitud Si el permiso es entre dominios, se emitirá una respuesta:
Además de Access-Control-Allow-Origin y Access-Control-Allow-Credentials, hay tres. encabezados adicionales:
Si el navegador obtiene la respuesta anterior, se considera que puede cruzar el dominio y el procesamiento posterior es el mismo que el de una solicitud simple.
Aunque el principio es más complicado, como se mencionó anteriormente:
De hecho, SpringMVC nos ha ayudado a escribir el filtro de dominio cruzado CORS: CorsFilter, que ya ha implementado lo que acabo de mencionar. internamente. Podemos usarlo directamente.
Escriba una clase de configuración en Aplicación y registre CorsFilter:
Estructura:
Simplemente colóquela en Aplicación.
4.5.4 Reiniciar prueba:
El acceso es normal: