2012-09-27 6 views
46

Ich versuche CORS Anfrage POST von domain.com zu a.domain.com zu machen.Wie funktionieren CORS und Access-Control-Allow-Header?

Meine Javascript wie folgt aussieht

$('#fileupload').fileupload({ 
    xhrFields: { 
    withCredentials: true 
    }, 
    dataType: 'json', 
    url: $('#fileupload').data('path'), 
    singleFileUploads: true, 
    add: function(e, data){ 
    data.submit(); 
    } 
}); 

Zuerst sehe ich die OPTIONS Strecke wie so genannt zu werden:

Request URL: https://a.domain.com/some/route 
Request Method:OPTIONS 
Status Code:200 OK 

Anfrage Optionen:

Access-Control-Request-Headers:origin, content-type, accept 
Access-Control-Request-Method:POST 
Host:a.domain.com 
Origin:http://domain.com:3000 
Referer:http://domain.com:3000/home 

Antwortoptionen

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Methods:POST 
Access-Control-Allow-Origin:http://domain.com:3000 
Connection:keep-alive 
Content-Length:0 
Content-Type:text/html;charset=utf-8 

Diese Anfrage kommt mit 200 wie angegeben zurück. Auf meinem Server, ich die gleiche Strecke mit POST Methode habe, und das ist, was ich im Gegenzug nach dem REQUEST OPTIONS

Request URL:https://a.domain.com/some/route 

POST

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryjwr5Pk7WBcfzMdbO 
Origin:http://domain.com:3000 
Referer:http://domain.com:3000/home 

und der POST Anfrage wird abgebrochen/versagt erhalten.

Meine Frage ist, muss ich auch die Zugriffssteuerung-ermöglichen-Herkunft auf dem POST-Controller?

Ich habe einen Cookie für die Autorisierung mit der Domain .domain.com, dass Cookie einmal in einer Anfrage gesendet wurde und jetzt nicht gesendet wird. Irgendeine Idee, warum das passieren würde?

Antwort

65

Ja, Sie müssen die Kopfzeile Access-Control-Allow-Origin: http://domain.com:3000 oder sowohl auf die OPTIONS-Antwort und die POST-Antwort haben. Sie sollten auch die Kopfzeile Access-Control-Allow-Credentials: true in die POST-Antwort einschließen.

Ihre OPTIONS-Antwort sollte auch die Kopfzeile Access-Control-Allow-Headers: origin, content-type, accept enthalten, damit sie der angeforderten Kopfzeile entspricht.

+1

Kann das Protokoll entfallen hinzufügen? oder kannst du eins mit http und https hinzufügen? – Michael

-13

Wenn Sie PHP verwenden Sie die folgenden Zeilen

header (" Access -Control- Allow-Origin : *") ; 
header (" Access- Control-Allow -Headers : *") ; 

Wahrscheinlich lösen Ihr Problem

+12

'Access-Control-Allow -Headers' akzeptiert keine Platzhalter. Bitte testen Sie Ihre Antworten vor der Veröffentlichung. – TRiNE

+1

'Access-Control-Allow-Origin' akzeptiert keine Platzhalter für Anmeldeinformationen. – Quentin