Heim >Web-Frontend >js-Tutorial >So lösen Sie das Problem des domänenübergreifenden Ajax-Zugriffs, der Sitzung kann nicht gespeichert werden usw.

So lösen Sie das Problem des domänenübergreifenden Ajax-Zugriffs, der Sitzung kann nicht gespeichert werden usw.

一个新手
一个新手Original
2017-09-27 09:59:061882Durchsuche


Gemäß den Schutzregeln des Browsers wird die von uns erstellte Sitzungs-ID nicht vom Browser gespeichert, wenn wir domänenübergreifend arbeiten -domain Beim Zugriff auf die Domäne wird unsere Sitzungs-ID nicht gespeichert. Mit anderen Worten: Bei jeder Anfrage geht der Server davon aus, dass es sich um eine neue Person und nicht um dieselbe Person handelt. Um dieses Problem zu lösen, verwenden Sie die folgende Methode kann verwendet werden, um diese domänenübergreifende Lösung zu lösen.

Konfiguration in Ajax-Anfrage hinzufügen

    $.ajax({
        url:url,        //加上 xhrFields及crossDomain
        xhrFields: {            //允许带上凭据
            withCredentials: true
        },
        crossDomain: true,        //以上
        success:function(result){
            alert("test");
        },
        error:function(){
        }
    });

Über withCredentials

withCredentials:
Standardmäßig stellen Cross-Origin-Anfragen keine Anmeldeinformationen bereit (Cookies, HTTP-Authentifizierung, Client-SSL-Zertifizierung usw.). Sie können festlegen, dass eine bestimmte Anfrage Anmeldeinformationen senden soll, indem Sie die Eigenschaft „withCredentials“ auf „true“ setzen. Wenn der Server eine Anfrage mit Anmeldeinformationen erhält, antwortet er mit den folgenden HTTP-Headern.

"Access-Control-Allow-Credentials: true"

Wenn eine Anfrage mit Anmeldeinformationen gesendet wird, die Antwort des Servers jedoch nicht den oben genannten Header enthält, dann wird die Der Browser übergibt die Antwort nicht an JavaScript (daher ist der Antworttext ein leerer String, der Statuswert ist 0 und der Ereignishandler onerror() wird aufgerufen). Darüber hinaus kann der Server diesen HTTP-Header auch in der Preflight-Antwort senden, um anzuzeigen, dass der Ursprung Anfragen mit Anmeldeinformationen senden darf.

Zu den Browsern, die das withCredentials-Attribut unterstützen, gehören Firefox 3.5+, Safari 4+ und Chrome. IE10 und frühere Versionen werden nicht unterstützt.
Gleichzeitig

Hinweis

Nach dem Hinzufügen des grundlegenden domänenübergreifenden Antwortheaders zulassen
Sie müssen Access-Allow-Credentials:true hinzufügen
Darüber hinaus aufgrund der Sicherheitsrichtlinie von Google
Wenn withCredentials wahr ist
Access-Allow-Origin im ResponseHeader kann den Platzhalter „*“ nicht verwenden
Andernfalls wird eine Meldung ausgegeben

Ein Platzhalter „*“ kann nicht verwendet werden Seien Sie uns

im Header „Access-Control-Allow-Origin“ angegeben, wenn das Anmeldeinformations-Flag wahr ist. Origin „http://url“ ist daher kein Zugriff gestattet.

Anderes Surfen Der Server soll getestet werden

Gemäß den Schutzregeln des Browsers wird die von uns erstellte Sitzungs-ID beim Überqueren von Domänen nicht vom Browser gespeichert . Wenn wir einen domänenübergreifenden Zugriff durchführen, wird unsere Sitzungs-ID nicht gespeichert. Mit anderen Worten: Bei jeder Anfrage geht der Server davon aus, dass es sich um eine neue Person handelt, nicht um dieselbe Person Um dieses Problem zu lösen, gibt es mehrere Möglichkeiten, dieses domänenübergreifende Problem zu lösen.

Konfiguration in Ajax-Anfrage hinzufügen

    $.ajax({
        url:url,        //加上 xhrFields及crossDomain
        xhrFields: {            //允许带上凭据
            withCredentials: true
        },
        crossDomain: true,        //以上
        success:function(result){
            alert("test");
        },
        error:function(){
        }
    });

Über withCredentials

withCredentials:
Standardmäßig stellen Cross-Origin-Anfragen keine Anmeldeinformationen bereit (Cookies, HTTP-Authentifizierung, Client-SSL-Zertifizierung usw.). Sie können festlegen, dass eine bestimmte Anfrage Anmeldeinformationen senden soll, indem Sie die Eigenschaft „withCredentials“ auf „true“ setzen. Wenn der Server eine Anfrage mit Anmeldeinformationen erhält, antwortet er mit den folgenden HTTP-Headern.

"Access-Control-Allow-Credentials: true"

Wenn eine Anfrage mit Anmeldeinformationen gesendet wird, die Antwort des Servers jedoch nicht den oben genannten Header enthält, dann wird die Der Browser übergibt die Antwort nicht an JavaScript (daher ist der Antworttext ein leerer String, der Statuswert ist 0 und der Ereignishandler onerror() wird aufgerufen). Darüber hinaus kann der Server diesen HTTP-Header auch in der Preflight-Antwort senden, um anzuzeigen, dass der Ursprung Anfragen mit Anmeldeinformationen senden darf.

Zu den Browsern, die das withCredentials-Attribut unterstützen, gehören Firefox 3.5+, Safari 4+ und Chrome. IE10 und frühere Versionen werden nicht unterstützt.
Gleichzeitig

Hinweis

Nach dem Hinzufügen des grundlegenden domänenübergreifenden Antwortheaders zulassen
Sie müssen Access-Allow-Credentials:true hinzufügen
Darüber hinaus aufgrund der Sicherheitsrichtlinie von Google
Wenn withCredentials wahr ist
Access-Allow-Origin im ResponseHeader kann den Platzhalter „*“ nicht verwenden
Andernfalls wird eine Meldung ausgegeben

Ein Platzhalter „*“ kann nicht verwendet werden im Header „Access -Control-Allow-Origin“ verwendet werden, wenn das Credentials-Flag „true“ ist. Origin „http://url“ ist daher kein Zugriff gestattet.

Andere zu testende Browser

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem des domänenübergreifenden Ajax-Zugriffs, der Sitzung kann nicht gespeichert werden usw.. 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