RSS

Il problema della semplice implementazione dell'accesso remoto POST multidominio javascript AJAX

Data di rilascio:2022/11/12 11:06

In realtà il problema è molto semplice: puoi inviare la richiesta e anche il server restituisce una risposta, è il meccanismo di sicurezza dei browser moderni che impedisce a javascript locale di elaborare la risposta. La console di debug mostra:

L'accesso a XMLHttpRequest su 'https://ip.taotu.org/' dall'origine 'null' è stato bloccato dal criterio CORS: nessuna intestazione 'Access-Control-Allow-Origin' è presente sulla risorsa richiesta.

Il problema è che se pubblichi una pagina locale, il browser aggiungerà automaticamente un'intestazione, Origin: null, e se il server non aggiunge l'intestazione della risposta Access-Control-Allow-Origin: * quando restituisce la risposta o l'intestazione Il valore restituito dal server è uguale al tuo Se l'origine nell'intestazione inviata non corrisponde, il client del browser non consegnerà i dati di risposta a javascript per l'elaborazione, generando un errore.

Soluzione: In effetti, è molto semplice, il codice back-end del server, dobbiamo solo verificare se i dati del post contengono le informazioni specificate (equivalenti alla nostra password), se sì, aggiungi Access-Control-Allow-Origin: *, in modo che il client possa essere gestito correttamente.

Il riepilogo è che le richieste AJAX tra domini non sono consentite per impostazione predefinita e il browser le proibirà.Il server giudica se la situazione lo richiede e restituisce un'intestazione di risposta Access-Control-Allow-Origin:* ed è OK.

Richiedi il codice javascript della pagina:

var xhttp = nuovo XMLHttpRequest();

xhttp.onreadystatechange = funzione () {

if (this. readyState == 4 && this. status == 200) {

document.getElementById("queryipinfo").innerHTML =

this.responseText;

}

};

xhttp.open("POST", "https://ip.taotu.org", true);

xhttp.send('XX comes from remote request XX'+ipdomain); //La stringa precedente aggiunta dal codice chiave è equivalente alla nostra password

Codice di elaborazione lato server:

Stream oPostData = Richiesta.InputStream;

byte[] bPostByte=nuovo byte[oPostData.Length];

oPostData.Read(bPostByte, 0, (int)oPostData.Length);

stringa sPostIPDomain=Codifica.UTF8.GetString(bPostByte);

bool bFromRemote;

if (sPostIPDomain.StartsWith("XX proviene dalla richiesta remota XX")) //codice chiave

{

bFromRemote=true;

sPostIPDomain = Regex.Replace(sPostIPDomain,"XX proviene dalla richiesta remota XX(.*)", "$1");

**********Codice omesso********

if (bFromRemote) //Codice chiave per giudicare se restituire l'intestazione

Response.AddHeader("Access-Control-Allow-Origin", "*"); //codice chiave

A proposito, la soluzione normale è impostare Access-Control-Allow-Origin: * nell'intestazione della risposta del server per consentire tutte le richieste tra domini o Access-Control-Allow-Origin: https://taotu.org per consentire La richiesta inviata dal dominio specificato viene utilizzata dal normale sviluppo della rete, ma se il requisito è che il dominio della richiesta inviato localmente a casa sia un indirizzo IP e non sia un IP fisso, questo non può essere risolto per molto tempo, quindi Ho usato questa soluzione semplice.

Il mio scopo è impostare un file .html statico nel browser del computer locale a casa e impostarlo come home page predefinita.Ogni volta che apro il browser, invio una richiesta di posta al server remoto tramite java e ritorno l'IP della mia rete esterna e visualizzarlo. Ci sono anche alcuni dei miei collegamenti ai siti Web utilizzati di frequente nella pagina statica, nonché un motore di ricerca tre in uno.

Questa è una piccola pagina web che ho creato, benvenuti a visitarla o impostarla come home page: https://ip.taotu.org

Il problema della semplice implementazione dell'accesso remoto POST multidominio javascript AJAX

commento dell'utente

Aggiungi nuovo commento

verificare

188BET - La migliore piattaforma di scommesse sportive