Heim >Backend-Entwicklung >PHP-Tutorial >Ajax setzt Access-Control-Allow-Origin, um domänenübergreifenden Zugriff zu erreichen

Ajax setzt Access-Control-Allow-Origin, um domänenübergreifenden Zugriff zu erreichen

WBOY
WBOYOriginal
2016-08-08 09:23:10884Durchsuche

Der domänenübergreifende Ajax-Zugriff ist ein altes Problem. Die am häufigsten verwendete Methode ist die JSONP , und diese Methode unterstützt nur GET, was nicht so sicher ist wie POST.

Auch wenn Sie die jsonp-Methode von jquery verwenden und den Typ auf POST setzen, wird er automatisch in GET geändert.


Offizielle Problembeschreibung:


„script“: Wertet die Antwort als JavaScript aus und gibt sie als Klartext zurück. Deaktiviert das Caching durch Anhängen des Abfragezeichenfolgenparameters „_=[TIMESTAMP]“ an die URL, es sei denn, die Cache-Option ist auf true gesetzt.

Hinweis: Dadurch werden POSTs in GETs für Remote-Domain-Anfragen umgewandelt.

Wenn Sie POST domänenübergreifend verwenden, können Sie damit einen versteckten Iframe erstellen und ihn mit hochladen Ajax Das Prinzip des Bildes ist dasselbe, aber es wird schwieriger sein.


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 ist www.client.com und der angeforderte Domänenname ist www.server.com


Wenn Sie Ajax für den direkten Zugriff verwenden, wird der folgende Fehler angezeigt


XMLHttpRequest kann http://www.server.com/server.php nicht laden . Auf der angeforderten Ressource ist kein „Access-Control-Allow-Origin“-Header vorhanden.

Origin „http://www.client.com“ ist daher kein Zugriff gestattet.

Fügen Sie


// hinzu, um anderen Domainnamen den Zugriff auf den


Header zu ermöglichen( 'Access -Control-Allow-Origin:

*');

// Antworttyp


header('Access-Control-Allow-Methods:

POST');

// Einstellung des Antwortheaders


header('Access-Control-Allow-Headers:

x-requested-with,content-type');

Sie können den domänenübergreifenden Ajax-POST-Zugriff implementieren.


Der Code lautet wie folgt:


client.html Pfad: http://www.client.com /client.html


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
  <meta http-equiv="content-type" c/html;charset=utf-8">
  <title> 跨域测试 </title>
  <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
 </head>

 <body>
    <div id="show"></div>
    <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>
server.php Pfad: http://www.server.com/server.php

<?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);
?>
Access-Control-Allow-Origin:* bedeutet, den domänenübergreifenden Zugriff von jedem Domänennamen aus zuzulassen

Wenn Sie

einen Domänennamen angeben müssen Um den domänenübergreifenden Zugriff zu ermöglichen, geben Sie einfach Access-Control-Allow-Origin:*Geändert in Access-Control-Allow-Origin:Allowed domain name
Zum Beispiel: header('Access- Control-Allow-Origin:

http://www.client.com

');
If erforderlich

Mehrere Domänennamen festlegen

Zugriff zulassen, Sie müssen PHP verwenden, um ihn hier zu verarbeiten
Erlauben Sie beispielsweise www.client.com und www. client2.com soll domänenübergreifenden Zugriff haben


server.php wird in


Quellcode-Download-Adresse: Klicken Sie hier, um
<?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);
?>

anzuzeigen

Das Obige stellt vor, wie man Access-Control-Allow-Origin für Ajax einstellt, um domänenübergreifenden Zugriff zu erreichen, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

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