Heim > Artikel > Web-Frontend > So richten Sie Ajax ein, um domänenübergreifenden Zugriff zu erreichen
Dieses Mal zeige ich Ihnen, wie Sie Ajax einrichten, um domänenübergreifenden Zugriff zu erreichen. Was sind die Vorsichtsmaßnahmen für die Einrichtung von Ajax, um domänenübergreifenden Zugriff zu erreichen? Schauen Sie mal rein.
Der domänenübergreifende Ajax-Zugriff ist ein altes Problem. Es gibt viele Lösungen. Die am häufigsten verwendete Methode ist die JSONP-Methode, und diese Methode unterstützt nur die GET-Methode, die nicht so sicher ist als POST-Methode.
Auch wenn Sie die JSONP-Methode von jQuery verwenden und den Typ auf POST setzen, ändert er sich automatisch in GET.
Offizielle Problembeschreibung:
"script": Wertet die Antwort als JavaScript aus und gibt sie als Klartext zurück, indem eine Abfrage angehängt wird Zeichenfolgenparameter „_=[TIMESTAMP]“ zur URL, es sei denn, die Cache-Option ist auf „true“ gesetzt Um die POST-Methode domänenübergreifend zu verwenden, können Sie einen versteckten Iframe erstellen, um das gleiche Prinzip wie beim Ajax-Hochladen von Bildern zu erreichen, aber das ist problematischer. Daher ist es relativ einfach, einen domänenübergreifenden Zugriff zu erreichen, indem Sie
Access-Control-Allow-Originfestlegen.
Zum Beispiel: Der Domänenname des Clients lautet www.client.com und der angeforderte Domänenname lautet www.server.comWenn Sie direkt über Ajax zugreifen, wird Folgendes angezeigt Fehler
XMLHttpRequest kann http://www.server.com/server.PHP nicht laden. Auf der angeforderten
Ressource.Origin ist kein Header „Access-Control-Allow-Origin“ vorhanden. Daher ist der Zugriff auf „http://www.client.com“ nicht gestattet.
zum angeforderten Antwortheader hinzu, um einen domänenübergreifenden Ajax-POST-Zugriff zu erreichen. Der Code lautet wie folgt:// 指定允许其他域名访问 header('Access-Control-Allow-Origin:*'); // 响应类型 header('Access-Control-Allow-Methods:POST'); // 响应头设置 header('Access-Control-Allow-Headers:x-requested-with,content-type');
client.html Pfad: http://www.client.com/client.html
server.php Pfad: http://www.client.com/client.html /www.server.com/server.php<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title> 跨域测试 </title> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> </head> <body> <p id="show"></p> <script type="text/javascript"> $.post("http://www.server.com/server.php",{name:"fdipzone",gender:"male"}) .done(function(data){ document.getElementById("show").innerHTML = data.name + ' ' + data.gender; }); </script> </body> </html>Access-Control-Allow-Origin:* bedeutet, den domänenübergreifenden Zugriff von jeder Domäne aus zuzulassen NameBei Bedarf
<?php $ret = array( 'name' => isset($_POST['name'])? $_POST['name'] : '', 'gender' => isset($_POST['gender'])? $_POST['gender'] : '' ); header('content-type:application:json;charset=utf8'); header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Methods:POST'); header('Access-Control-Allow-Headers:x-requested-with,content-type'); echo json_encode($ret); ?>Geben Sie einen Domänennamen an
um domänenübergreifenden Zugriff zu ermöglichen, ändern Sie einfach Access-Control-Allow-Origin:* in Access-Control-Allow-Origin:
Allowed DomänennameZum Beispiel: header(' Access-Control-Allow-Origin: http://www.client.com');Bei Bedarf
Legen Sie mehrere Domänennamen festum den Zugriff zu ermöglichen, müssen Sie hier PHP verwenden
Um beispielsweise www.client.com und www.client2.com domänenübergreifenden Zugriff zu ermöglichen server.php wurde geändert in
Quellcode-Download-Adresse:<?php $ret = array( 'name' => isset($_POST['name'])? $_POST['name'] : '', 'gender' => isset($_POST['gender'])? $_POST['gender'] : '' ); header('content-type:application:json;charset=utf8'); $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array( 'http://www.client.com', 'http://www.client2.com' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); header('Access-Control-Allow-Methods:POST'); header('Access-Control-Allow-Headers:x-requested-with,content-type'); } echo json_encode($ret); ?>
http://xiazai.jb51.net/201702/yuanma/ demo(jb51.net)Das Folgende sind die Ergänzungen von anderen Internetnutzern: Kürzlich cocos2d verwendet – Beim Erstellen von Spielen mit js,
Bei Verwendung des domänenübergreifenden Ajax-Zugriffs tritt ein Fehler auf Anfrage lokal: XMLHttpRequest kann http://www.zjblogs.com/ nicht laden. Auf der angeforderten Ressource ist kein „Access-Control-Allow-Origin“-Header vorhanden.
Ich habe online nachgesehen und die Lösung ist wie folgt:
1. Wenn die angeforderte URL eine ASPX-Seite ist, müssen Sie der ASPX-Seite Code hinzufügen: Response.AddHeader("Access-Control -Allow-Origin", "*");
2. Wenn es sich bei der angeforderten URL um eine PHP-Seite handelt, müssen Sie der PHP-Seite Code hinzufügen::header("Access-Control-Allow-Origin: * ");
3. Wenn es sich bei der angeforderten URL um eine statische HTML-Seite handelt, müssen Sie der Seite den Meta-Tag-Code hinzufügen:
Das * bedeutet hier, dass alle Domainnamen zulässig sind Wenn der Server bestimmen kann, auf welche Domänennamen zugegriffen werden soll, ersetzen Sie am besten das „*“ im obigen Code. Dies kann die Sicherheit entsprechend erhöhen.
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!
Empfohlene Lektüre:
Verwendung von Ajax zur Implementierung von Registrierungs- und Avatar-Upload-FunktionenSo verwenden Sie Ajax und $.ajax
Das obige ist der detaillierte Inhalt vonSo richten Sie Ajax ein, um domänenübergreifenden Zugriff zu erreichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!