Hace mucho que no escribo un ensayo, y siempre siento que no tengo tiempo, pero en realidad, el tiempo es... Basta de tonterías, hace unos días hubo un nuevo requisito en el trabajo, que requería que la página web frontal llamara al método del servicio web de backend de forma asíncrona para devolver información. Hay muchas formas de implementarlo, este ejemplo usa jQuery+Ajax, y al completarlo, todo está bien para depurar localmente, pero hay un problema después de desplegar en el servidor y la llamada al servicio en segundo plano no responde, ¿qué está pasando? El código no ha cambiado mucho, lo único que ha cambiado es la dirección URL en el método ajax de jQuery. ¿Podría ser que el problema aquí sea que, tras comprobar y depurar, resulta que la política homóloga es la culpable? Sabemos que Javascrip{filtering}t o jQuery es una técnica de scripting dinámico que se usa a menudo en el desarrollo de front-end web. En Javascrip{filtering}t, existe una limitación de seguridad importante conocida como la "Política de Mismo Origen". Esta política impone una restricción importante sobre el contenido de la página a la que el código Javascrip{filter}t puede acceder, es decir, Javascrip{filtering}t solo puede acceder a contenido bajo el mismo nombre de dominio que el documento o script que lo contiene. Los scripts de diferentes dominios no pueden acceder entre sí, ni siquiera a los subdominios. En cuanto a la estrategia homóloga, los lectores pueden explicarla con más detalle sobre Baidu, lo cual no se repetirá aquí.
Pero a veces es inevitable realizar operaciones interdominios, y la "política homóloga" es una limitación, ¿qué deberíamos hacer? Veamos cómo se implementa JSONP multidominio y discutamos el principio de JSONP multidominio.
Aquí se menciona JSONP, luego alguien preguntó, ¿cuál es la diferencia y diferencia entre este y JSON? Vamos a echar un vistazo, la Enciclopedia Baidu tiene la siguiente explicación:
JSON (Javascrip{filtering}t Object Notation) es un formato ligero de intercambio de datos. Se basa en un subconjunto de Javascrip{filter}t (Standard ECMA-262 3ª Edición - diciembre de 1999). JSON utiliza un formato de texto completamente independiente del lenguaje, pero también utiliza hábitos similares a la familia C (incluyendo C, C++, C#, Java, Javascrip, Perl, Python, etc.). Estas características hacen que JSON sea un lenguaje ideal para el intercambio de datos. Fácil de leer y escribir por humanos, pero también fácil de analizar y generar por máquina (transmisión rápida en red).
JSONP (JSON con relleno) es un "patrón de uso" de JSON, que puede emplearse para resolver el problema del acceso a datos entre dominios en navegadores convencionales. Debido a la política de mismo origen, las páginas generalmente ubicadas en server1.example.com no pueden comunicarse con servidores que no estén server1.example.com, salvo el elemento <scrip{filter}t> de HTML. Usando esta estrategia abierta del elemento <scrip{filter}t>, las páginas web pueden obtener datos JSON generados dinámicamente desde otras fuentes, y este patrón de uso se conoce como JSONP. Los datos capturados con JSONP no son JSON, sino un Javascrip{filter}t arbitrario, que se ejecuta con el traductor Javascrip{filter}t en lugar de analizarlo por el analizador JSON.
En este punto, debe entenderse que JSON es un formato ligero de intercambio de datos, como xml, que se usa para describir datos entre datos. JSONP es una forma de usar datos JSON y, en lugar de devolver un objeto JSON, es un script javascrip{filtering}t que contiene un objeto JSON.
Entonces, ¿cómo funciona JSONP? Sabemos que, debido a las limitaciones de la política de origen similar, XmlHttpRequest solo permite solicitudes de recursos desde la fuente actual (nombre de dominio, protocolo, puerto). Las solicitudes entre dominios no son posibles por razones de seguridad, pero descubrimos que cuando se llaman archivos js en páginas web, no se ven afectados por el dominio cruzado o no, y las etiquetas con el atributo "src" tienen capacidades entre dominios, como <scrip{filter}t>, <img>, ,<iframe>Si quieres hacer una solicitud multidominio, haz una solicitud multidominio usando la etiqueta scrip{filter}t de html, y devuelves el código scrip{filtering}t para ejecutarse en la respuesta, en la que puedes usar directamente JSON para pasar el objeto javascrip{filter}t. Es decir, generar datos JSON en el servidor multidominio y luego envolverlos en un script script{filtering}t de vuelta, que rompe las limitaciones de la política de origen similar y resuelve el problema del acceso entre dominios.
Veamos cómo lograrlo:
Código de la interfaz principal:
|