Política de mesma origem
Em linguagens de programação do lado do cliente, como JavaScript e ActionScript, a política de mesma origem é um conceito de segurança muito importante, de grande importância para garantir a segurança dos dados. A política de mesma origem estipula que os scripts entre domínios são isolados. Os scripts em um domínio não podem acessar e operar a maioria das propriedades e métodos de outro domínio. Então, o que é o mesmo domínio e o que é um domínio diferente? Quando dois domínios têm o mesmo protocolo (como http), a mesma porta (como 80) e o mesmo host (como www.example.org), podemos considerá-los como o mesmo domínio. Por exemplo, http://www.example.org/index.html e http://www.example.org/sub/index.html estão no mesmo domínio, enquanto http://www.example.org, https ://www Quaisquer dois de .example.org, http://www.example.org:8080, http://sub.example.org constituirão um domínio cruzado. A política de mesma origem também deve lidar com algumas situações especiais, como restringir as permissões de acesso de scripts no protocolo de arquivo. Arquivos HTML locais são abertos no navegador por meio do protocolo de arquivo. Se o script puder acessar qualquer outro arquivo no disco rígido por meio do protocolo de arquivo, atualmente o IE8 ainda apresenta esses riscos.
Afetados pela mesma política de origem, o compartilhamento de recursos entre domínios será restrito. No entanto, com a prática das pessoas e o avanço dos navegadores, há atualmente muita experiência valiosa acumulada e acumulada nas habilidades de solicitações entre domínios. Aqui eu divido o compartilhamento de recursos entre domínios em dois tipos, um é a solicitação de dados unidirecional e o outro é a comunicação de mensagens bidirecional. A seguir, listarei alguns métodos comuns de domínio cruzado. O código-fonte dos seguintes exemplos de domínio cruzado pode ser obtido aqui .
Domínio cruzado unidirecional
JSONP
JSONP (JSON com preenchimento) é um método simples e eficiente entre domínios. A tag de script em HTML pode carregar e executar JavaScript de outros domínios, para que possamos carregar dinamicamente recursos de outros domínios por meio de tags de script. Por exemplo, se eu quiser carregar os dados do domínio B da página pageA do domínio A, na página pageB do domínio B, declaro os dados exigidos pela páginaA na forma de JavaScript e, em seguida, uso a tag de script em pageA para carregar a páginaB, então na páginaB o script será executado. JSONP adiciona uma função de retorno de chamada com base nisso. Após o carregamento da páginaB, a função definida na páginaA será executada e os dados necessários serão passados para a função na forma de parâmetros. JSONP é fácil de implementar, mas também apresenta alguns riscos de segurança. Se um script de terceiros for executado à vontade, ele poderá interferir no conteúdo da página e interceptar dados confidenciais. Mas ao transferir dados entre partes confiáveis, o JSONP é uma escolha muito adequada.
Carregador de URL Flash
O Flash tem seu próprio conjunto de políticas de segurança. O servidor pode usar o arquivo crossdomain.xml para declarar quais domínios os arquivos SWF podem ser acessados. Ao acessar recursos entre domínios, como solicitar dados no domínio www.b.com do domínio www.a.com, podemos usar Flash para enviar solicitações HTTP. Primeiro, modifique o crossdomain.xml no domínio www.b.com (geralmente armazenado no diretório raiz, se não houver necessidade de criá-lo manualmente), adicione www.a.com à lista de permissões. Em segundo lugar, a solicitação HTTP é enviada através do Flash URLLoader e, finalmente, o resultado da resposta é passado para JavaScript através da API Flash. Flash URLLoader é uma solução entre domínios muito comum, mas se precisar oferecer suporte a iOS, esta solução não poderá fazer nada.
Controle de acesso
O controle de acesso é um método de domínio cruzado mais transcendente. Atualmente, é suportado apenas em alguns navegadores. Esses navegadores podem enviar uma solicitação HTTP de domínio cruzado (Firefox, Google Chrome, etc. são implementados por meio de XMLHTTPRequest e o IE8 é implementado por meio de XDomainRequest). ). A resposta à solicitação deve incluir um cabeçalho de resposta HTTP Access-Control-Allow-Origin, que declara a acessibilidade do domínio solicitado. Por exemplo, www.a.com envia uma solicitação HTTP de domínio cruzado para asset.php em www.b.com , então asset.php deve adicionar o seguinte cabeçalho de resposta:
header("Access-Control-Allow-Origin: http://www.a.com");