O problema da implementação simples do acesso remoto POST entre domínios javascript AJAX
data de lançamento:2022/11/12 11:06Na verdade, o problema é muito simples. Você pode POSTAR a solicitação e o servidor também retorna uma resposta. É o mecanismo de segurança dos navegadores modernos que impede que o javascript local processe a resposta. O console de depuração mostra:
O acesso a XMLHttpRequest em 'https://ip.taotu.org/' da origem 'nulo' foi bloqueado pela política CORS: Nenhum cabeçalho 'Access-Control-Allow-Origin' está presente no recurso solicitado.
O problema é que, se você postar uma página local, o navegador adicionará automaticamente um cabeçalho, Origin: null, e se o servidor não adicionar o cabeçalho de resposta Access-Control-Allow-Origin: * ao retornar a resposta ou o cabeçalho o valor retornado pelo servidor é o mesmo que o seu Se a Origem no cabeçalho enviado não corresponder, o cliente do navegador não entregará os dados de resposta ao javascript para processamento, resultando em um erro.
Solução: Na verdade, é muito simples, o código back-end do servidor, precisamos apenas verificar se os dados do post contêm as informações especificadas (equivalente à nossa própria senha), se sim, adicione Access-Control-Allow-Origin: *, para que o cliente possa ser tratado corretamente.
O resumo é que as solicitações AJAX entre domínios não são permitidas por padrão e o navegador as proibirá. O servidor julga se a situação exige isso e retorna um cabeçalho de resposta Access-Control-Allow-Origin:* e está OK.
Código javascript da página de solicitação:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = função () {
if (this. readyState == 4 && this. status == 200) {
document.getElementById("queryipinfo").innerHTML =
this.respostaTexto;
}
};
xhttp.open("POST", "https://ip.taotu.org", verdadeiro);
xhttp.send('XX vem da solicitação remota XX'+ipdomain); //A string anterior adicionada pelo código-chave é equivalente à nossa própria senha
Código de processamento do lado do servidor:
Stream oPostData = Pedido InputStream;
byte[] bPostByte=novo byte[oPostData.Length];
oPostData.Read(bPostByte, 0, (int)oPostData.Length);
string sPostIPDomain=Encoding.UTF8.GetString(bPostByte);
bool bFromRemote;
if (sPostIPDomain.StartsWith("XX vem da solicitação remota XX")) //código-chave
{
bFromRemote=verdadeiro;
sPostIPDomain = Regex.Replace(sPostIPDomain,"XX vem da solicitação remota XX(.*)", "$1");
*********Código Omitido********
if (bFromRemote) //Código-chave para julgar se deve retornar o cabeçalho
Response.AddHeader("Access-Control-Allow-Origin", "*"); //código-chave
A propósito, a solução normal é definir Access-Control-Allow-Origin: * no cabeçalho de resposta do servidor para permitir todas as solicitações entre domínios ou Access-Control-Allow-Origin: https://taotu.org para permitir A solicitação enviada pelo domínio especificado é usada pelo desenvolvimento normal da rede, mas se o requisito for que o domínio da solicitação enviado localmente em casa seja um endereço IP e não um IP fixo, isso não pode ser resolvido por muito tempo, portanto Eu usei esta solução simples.
Meu objetivo é definir um arquivo .html estático no navegador do computador local em casa e defini-lo como a página inicial padrão. Sempre que abro o navegador, envio uma solicitação de postagem ao servidor remoto por meio de java e retorno meu IP de rede externa e exibi-lo. Há também alguns links de sites usados com frequência na página estática, bem como um mecanismo de pesquisa três em um.
Esta é uma pequena página da web que fiz, bem-vindo para visitá-la ou defini-la como página inicial: https://ip.taotu.org
comentário do usuário
Adicionar novo comentário