Red de conocimiento informático - Computadora portátil - Problemas entre dominios de Ajax y sus soluciones

Problemas entre dominios de Ajax y sus soluciones

En el modo de separación de front-end y back-end principal, cuando el front-end llama a la interfaz de back-end, dado que la solicitud está en un dominio diferente, se activará la protección de autoseguridad del navegador. El resultado final es que la solicitud de la interfaz es exitosa y responde, pero el front-end no puede procesar los datos devueltos normalmente.

Por lo tanto, cuando se cumplen las siguientes tres condiciones al mismo tiempo, se producirán problemas entre dominios:

Para resolver completamente el problema entre dominios, solo necesita destruir el Las tres condiciones anteriores son suficientes:

Agregar parámetros de inicio del navegador: chrome --disable-web-security, pero no se recomienda esta solución.

Jsonp, nombre completo JSON con relleno, es un protocolo no oficial, pero el front-end resuelve problemas entre dominios enviando solicitudes de tipo script al fondo y la interfaz responde con el tipo aplicación/javascript. Los datos en este momento se procesarán como un parámetro de la función de devolución de llamada.

Por lo tanto, el fondo también necesita realizar el procesamiento correspondiente. Tomando Java como ejemplo, simplemente agregue la siguiente configuración:

En resumen, las solicitudes jsonp tienen las siguientes desventajas:

Utilice Nginx o Apache para representar la solicitud de la persona que llama (los cambios del cliente son un solicitud de ruta relativa, no una ruta absoluta). En este momento, para el navegador, dado que la solicitud proviene del mismo origen, no hay problema entre dominios.

Tomando la aplicación Java como ejemplo, agregue la siguiente configuración global:

Si solo desea configurar la interfaz bajo una determinada clase o configurar una interfaz específica para permitir dominios cruzados , Simplemente agregue la anotación @CrossOrigin en el lugar correspondiente.

Si nginx está configurado como servidor proxy, solo necesita agregar soporte para solicitudes entre dominios a nginx:

P1: Cuando el navegador realiza solicitudes entre dominios, es ¿Ejecutado primero y luego Juicio, o juzgar primero y luego ejecutar?

R1: Es posible, esto debe juzgarse según si la solicitud enviada es una solicitud simple o una solicitud no simple, si es una solicitud no simple, el navegador la enviará primero. antes de ejecutar la solicitud real cada vez. Un comando de verificación previa en el modo de solicitud de opciones puede establecer la duración del caché y cancelar la verificación previa para cada solicitud para mejorar la eficiencia. Con respecto a la distinción y definición de los dos tipos de solicitudes, consulte la siguiente figura:

P2: Si se permiten solicitudes entre dominios con cookies (destinatarias), el servidor también se configura como Control de acceso -Permitir. -El origen es igual a *, ¿aún puede la interfaz realizar la solicitud correctamente?

R2: No, en este momento, Access-Control-Allow-Origin debe especificarse como el dominio específico de la persona que llama. Primero puede obtener el dominio de la persona que llama y luego configurarlo dinámicamente. que no haya múltiples solicitudes de dominio. Limite el problema y agregue la configuración Access-Control-Allow-Credentials a verdadero.