Política del mismo origen
En los lenguajes de programación del lado del cliente, como JavaScript y ActionScript, la política del mismo origen es un concepto de seguridad muy importante, que es de gran importancia para garantizar la seguridad de los datos. La política del mismo origen estipula que los scripts entre dominios están aislados. Los scripts de un dominio no pueden acceder ni operar la mayoría de las propiedades y métodos de otro dominio. Entonces, ¿qué es el mismo dominio y qué es un dominio diferente? Cuando dos dominios tienen el mismo protocolo (como http), el mismo puerto (como 80) y el mismo host (como www.example.org), entonces podemos considerarlos como el mismo dominio. Por ejemplo, http://www.example.org/index.html y http://www.example.org/sub/index.html están en el mismo dominio, mientras que http://www.example.org, https ://www Dos de .example.org, http://www.example.org:8080, http://sub.example.org constituirán un dominio cruzado. La política del mismo origen también debería manejar algunas situaciones especiales, como restringir los permisos de acceso de scripts bajo el protocolo de archivos. Los archivos HTML locales se abren en el navegador a través del protocolo de archivos. Si el script puede acceder a cualquier otro archivo en el disco duro a través del protocolo de archivos, surgirán riesgos de seguridad. Actualmente, IE8 todavía presenta tales riesgos.
Afectado por la misma política de origen, el intercambio de recursos entre dominios estará restringido. Sin embargo, con la práctica de las personas y el avance de los navegadores, actualmente hay mucha experiencia valiosa acumulada y acumulada en las habilidades de solicitudes entre dominios. Aquí divido el intercambio de recursos entre dominios en dos tipos, uno es solicitud de datos unidireccional y el otro es comunicación de mensajes bidireccional. A continuación, enumeraré algunos métodos comunes entre dominios. El código fuente de los siguientes ejemplos entre dominios se puede obtener aquí .
Dominio cruzado unidireccional
JSONP
JSONP (JSON con relleno) es un método entre dominios simple y eficiente. Las etiquetas de script en HTML pueden cargar y ejecutar JavaScript desde otros dominios, por lo que podemos cargar dinámicamente recursos de otros dominios a través de etiquetas de script. Por ejemplo, si quiero cargar los datos del dominio B desde la página A del dominio A, entonces en la página B del dominio B, declaro los datos requeridos por la página A en forma de JavaScript y luego uso la etiqueta script en páginaA para cargar la páginaB, luego en la páginaB Se ejecutará el script. JSONP agrega una función de devolución de llamada sobre esta base. Después de cargar la página B, se ejecutará la función definida en la página A y los datos requeridos se pasarán a la función en forma de parámetros. JSONP es fácil de implementar, pero también existen algunos riesgos de seguridad. Si se ejecuta un script de terceros a voluntad, puede alterar el contenido de la página e interceptar datos confidenciales. Pero al transferir datos entre partes de confianza, JSONP es una opción muy adecuada.
Cargador de URL Flash
Flash tiene su propio conjunto de políticas de seguridad. El servidor puede usar el archivo crossdomain.xml para declarar a qué archivos SWF de dominio se puede acceder. SWF también puede usar la API para determinar desde qué dominios se puede cargar. Al acceder a recursos entre dominios, como solicitar datos en el dominio www.b.com desde el dominio www.a.com, podemos usar Flash para enviar solicitudes HTTP. Primero, modifique crossdomain.xml en el dominio www.b.com (generalmente almacenado en el directorio raíz, si no es necesario crearlo manualmente), agregue www.a.com a la lista blanca. En segundo lugar, la solicitud HTTP se envía a través de Flash URLLoader y, finalmente, el resultado de la respuesta se pasa a JavaScript a través de la API Flash. Flash URLLoader es una solución entre dominios muy común, pero si necesita ser compatible con iOS, esta solución no puede hacer nada.
Control de acceso
El control de acceso es un método entre dominios más trascendente. Actualmente, solo se admite en algunos navegadores. Estos navegadores pueden enviar solicitudes HTTP entre dominios (Firefox, Google Chrome, etc. se implementan a través de XMLHTTPRequest, e IE8 se implementa a través de XDomainRequest). ). La respuesta a la solicitud debe incluir un encabezado de respuesta HTTP Access-Control-Allow-Origin, que declara la accesibilidad del dominio solicitado. Por ejemplo, www.a.com envía una solicitud HTTP entre dominios a active.php en www.b.com , luego active.php debe agregar el siguiente encabezado de respuesta:
encabezado("Control-de-acceso-permitir-origen: http://www.a.com");