Faz tempo que não escrevo uma redação, e sempre sinto que não tenho tempo, mas na verdade, tempo é... Chega de bobagem, alguns dias atrás houve um novo requisito em ação, que exigia que a página web da interface chamasse o método do serviço web backend de forma assíncrona para devolver informações. Existem várias formas de implementá-lo, este exemplo usa jQuery+Ajax, após a conclusão, tudo está bem para depurar localmente, mas há um problema após a implantação no servidor, e a chamada de serviço em segundo plano não responde, o que está acontecendo? O código não mudou muito, a única coisa que mudou foi o endereço URL no método ajax do jQuery. Será que o problema aqui é que, após checar e depurar, descobrimos que a política homóloga está em causa, sabemos que Javascrip{filtering}t ou jQuery é uma técnica de script dinâmico frequentemente usada no desenvolvimento front-end web. No Javascrip{filtering}t, existe uma limitação importante de segurança conhecida como "Política de Mesma Origem". Essa política impõe uma restrição importante ao conteúdo da página que o código Javascrip{filter}t pode acessar, ou seja, o Javascrip{filtering}t só pode acessar conteúdo sob o mesmo nome de domínio do documento ou script que o contém. Scripts sob domínios diferentes não conseguem acessar uns aos outros, nem mesmo subdomínios. Quanto à estratégia homóloga, os leitores podem explicá-la com mais detalhes sobre Baidu, o que não será repetido aqui.
Mas às vezes é inevitável realizar operações cruzadas de domínios, e a "política homóloga" é uma limitação: o que devemos fazer? Vamos analisar como o JSONP multidomínio é implementado e discutir o princípio do JSONP multidomínio.
O JSONP é mencionado aqui, então alguém perguntou: qual é a diferença e diferença entre ele e o JSON, vamos dar uma olhada, a Enciclopédia Baidu tem a seguinte explicação:
JSON (Javascrip{filtering}t Object Notation) é um formato leve de troca de dados. É baseado em um subconjunto do Javascrip{filter}t (Standard ECMA-262 3ª Edição - dezembro de 1999). O JSON utiliza um formato de texto totalmente independente da linguagem, mas também utiliza hábitos semelhantes à família C (incluindo C, C++, C#, Java, Javascrip, Perl, Python, etc.). Esses recursos tornam o JSON uma linguagem ideal para troca de dados. Fácil de ler e escrever por humanos, mas também fácil de analisar e gerar por máquina (transmissão rápida em rede).
JSONP (JSON com preenchimento de informação) é um "padrão de uso" do JSON, que pode ser usado para resolver o problema do acesso a dados entre domínios em navegadores convencionais. Devido à política de origem semelhante, páginas geralmente localizadas em server1.example.com não podem se comunicar com servidores que não sejam server1.example.com, com exceção do elemento <scrip{filter}t> do HTML. Usando essa estratégia aberta do elemento <scrip{filter}t>, páginas web podem obter dados JSON gerados dinamicamente de outras fontes, e esse padrão de uso é conhecido como JSONP. Os dados capturados com JSONP não são JSON, mas sim um Javascrip{filter}t arbitrário, que é executado com o tradutor Javascrip{filter}t em vez de analisado pelo parser JSON.
Neste ponto, deve-se entender que JSON é um formato leve de troca de dados, como xml, que é usado para descrever dados entre dados. JSONP é uma forma de usar dados JSON e, em vez de retornar um objeto JSON, é um script javascrip{filtering}t que contém um objeto JSON.
Então, como o JSONP funciona? Sabemos que, devido às limitações da política de origem semelhante, o XmlHttpRequest só permite solicitações de recursos da fonte atual (nome de domínio, protocolo, porta). Requisições entre domínios não são possíveis por razões de segurança, mas descobrimos que, quando arquivos js são chamados em páginas web, eles não são afetados por domínio cruzado ou não, e tags com o atributo "src" possuem capacidades multidomínio, como <scrip{filter}t>, <img>, ,<iframe>Se você quiser fazer uma requisição multidomínio, faça uma requisição multidomínio usando a tag scrip{filter}t do html, e retorne o código scrip{filtering}t para ser executado na resposta, na qual você pode usar JSON diretamente para passar o objeto javascrip{filter}t. Ou seja, gerar dados JSON no servidor multidomínio e depois envolvê-los em um script script{filtering}t de volta, que rompe as limitações da política de origem semelhante e resolve o problema do acesso entre domínios.
Vamos ver como alcançá-lo:
Código front-end:
|