Heim  >  Artikel  >  Web-Frontend  >  So richten Sie Ajax ein, um domänenübergreifenden Zugriff zu erreichen

So richten Sie Ajax ein, um domänenübergreifenden Zugriff zu erreichen

php中世界最好的语言
php中世界最好的语言Original
2018-04-02 16:01:481376Durchsuche

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-Origin

festlegen.

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.

Fügen Sie

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 Name

Bei Bedarf
<?php 
$ret = array( 
 &#39;name&#39; => 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änenname

Zum Beispiel: header(' Access-Control-Allow-Origin: http://www.client.com');Bei Bedarf

Legen Sie mehrere Domänennamen fest

um 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( 
 &#39;name&#39; => 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-Funktionen

So 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn