RSS

O problema da implementação simples do acesso remoto POST entre domínios javascript AJAX

data de lançamento:2022/11/12 11:06

Na 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

O problema da implementação simples do acesso remoto POST entre domínios javascript AJAX

comentário do usuário

Adicionar novo comentário

Código

188BET - A melhor plataforma de apostas esportivas do mundo