RSS

Le problème de la mise en œuvre simple de l'accès à distance POST inter-domaines javascript AJAX

Date de sortie:2022/11/12 11:06

En fait, le problème est très simple. Vous pouvez POSTer la requête, et le serveur renvoie également une réponse. C'est le mécanisme de sécurité des navigateurs modernes qui empêche le javascript local de traiter la réponse. La console de débogage affiche :

L'accès à XMLHttpRequest sur 'https://ip.taotu.org/' depuis l'origine 'null' a été bloqué par la politique CORS : aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée.

Le problème est que si vous publiez une page locale, le navigateur ajoutera automatiquement un en-tête, Origin: null, et si le serveur n'ajoute pas l'en-tête de réponse Access-Control-Allow-Origin: * lors du retour de la réponse, ou l'en-tête la valeur renvoyée par le serveur est la même que la vôtre Si l'origine dans l'en-tête envoyé ne correspond pas, le client du navigateur ne transmettra pas les données de réponse à javascript pour traitement, ce qui entraînera une erreur.

Solution : En fait, c'est très simple, le code back-end du serveur, nous n'avons qu'à vérifier si les données de publication contiennent les informations spécifiées (équivalentes à notre propre mot de passe), si oui, ajoutez Access-Control-Allow-Origin : *, afin que le client puisse être manipulé correctement.

Le résumé est que les requêtes inter-domaines AJAX ne sont pas autorisées par défaut, et le navigateur les interdira. Le serveur juge si la situation l'exige, et renvoie un en-tête de réponse Access-Control-Allow-Origin:* et c'est OK.

Demander le code javascript de la page :

var xhttp = new XMLHttpRequest();

xhttp.onreadystatechange = fonction () {

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

document.getElementById("queryipinfo").innerHTML =

this.responseText;

}

} ;

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

xhttp.send('XX vient de la requête distante XX'+domaineip); //La chaîne précédente ajoutée par le code clé équivaut à notre propre mot de passe

Code de traitement côté serveur :

Flux oPostData = Request.InputStream ;

octet[] bPostByte=nouvel octet[oPostData.Length] ;

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

chaîne sPostIPDomain=Encoding.UTF8.GetString(bPostByte);

booléen bFromRemote ;

if (sPostIPDomain.StartsWith("XX vient de la requête distante XX")) //code clé

{

bFromRemote=true ;

sPostIPDomain = Regex.Replace(sPostIPDomain,"XX provient de la requête distante XX(.*)", "$1");

*********Code omis********

if (bFromRemote) //Code clé pour juger s'il faut retourner l'en-tête

Response.AddHeader("Access-Control-Allow-Origin", "*"); //code clé

Soit dit en passant, la solution normale consiste à définir Access-Control-Allow-Origin : * dans l'en-tête de réponse du serveur pour autoriser toutes les requêtes inter-domaines, ou Access-Control-Allow-Origin : https://taotu.org pour autoriser La requête envoyée par le domaine spécifié est utilisée par le développement normal du réseau, mais si l'exigence est que le domaine de requête envoyé localement à la maison soit une adresse IP et qu'il ne s'agisse pas d'une adresse IP fixe, cela ne peut pas être résolu pendant longtemps, donc J'ai utilisé cette solution simple.

Mon but est de définir un fichier .html statique dans le navigateur de l'ordinateur local à la maison et de le définir comme page d'accueil par défaut. Chaque fois que j'ouvre le navigateur, j'envoie une demande de publication au serveur distant via Java et je reviens mon adresse IP de réseau externe et l'afficher. Il y a aussi certains de mes liens de sites Web fréquemment utilisés sur la page statique, ainsi qu'un moteur de recherche trois en un.

Ceci est une petite page Web que j'ai créée, bienvenue à visiter ou à définir comme page d'accueil : https://ip.taotu.org

Le problème de la simple implémentation de l'accès à distance POST inter-domaines javascript AJAX

commentaire de l'utilisateur

Ajouter un nouveau commentaire

vérification

188BET - La meilleure plateforme de paris sportifs