Il problema della semplice implementazione dell'accesso remoto POST multidominio javascript AJAX
Data di rilascio:2022/11/12 11:06In 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
commento dell'utente
Aggiungi nuovo commento