CORS cookie nicht gesendet wird, in Chrom

Habe ich einen einfachen Datei-upload-Formular mit jQuery-ajax-Aufruf auf eine andere domain. Der browser Cookies für die domain, und dieses cookie wird gesendet, mit der Anfrage im Firefox. Allerdings ist das cookie nicht vorhanden im Chrom, was zu Fehler beim log-in.
Ich habe überprüft, ob das cookie existiert in Chrome, die nur nicht gesendet, mit der Anfrage.

Den ajax-Aufruf:
Einige mag dies nicht notwendig sein. Es wurde Hinzugefügt, versucht mit Lösungsvorschlägen und Links zu demonstrieren diese versuche.

<head>
    <script src="jquery-2.1.1.min.js"></script>
</head>

<form enctype="multipart/form-data" id="file" method="POST">
    <input name="file" type="file" />
    <input name="Submit" type="button" id="upload"/>
</form>

<script type="text/javascript">
    $.support.cors = true

    $('input#upload').click(function(){
        var formData = new FormData($('form#file')[0]);

        .ajax({
            url: 'http://accounts.mysite.dev/file/saveasset',
            type: 'POST',
            data: formData,
            cache: false,
            contentType: false,
            processData: false,
            xhrFields: {
                withCredentials: true
            },
            crossDomain: true
        });
    });
</script>

Firefox sendet die richtige Header, einschließlich des Benutzers cookie

POST /file/saveasset HTTP/1.1
Host: accounts.mysite.dev
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://phptest/htmltest/fileUpload.html
Content-Length: 8032
Content-Type: multipart/form-data; boundary=---------------------------4450073521062221055385143281
Origin: http://phptest
Cookie: Accounts=somecookiestuff
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Aber Chrome nicht

POST /file/saveasset HTTP/1.1
Host: accounts.mysite.dev
Content-Length: 7981
Accept: */*
Origin: http://phptest
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryGyMYxvKgEKWfBR5x
Referer: http://phptest/htmltest/fileUpload.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

Ich glaube, dass der server richtig konfiguriert ist um dies zu ermöglichen, Herkunft und Anmeldeinformationen, aber Sie sind auch nicht geschickt in Chrome die Anfrage. Falls es relevant ist, mein server (php w/Zend) setzt

$this->_response->setHeader('Access-Control-Allow-Origin', 'http://phptest');
$this->_response->setHeader('Access-Control-Allow-Credentials', 'true');

Sehe ich keine OPTION preflight-Anfrage an den server.

Warum nicht Chrome senden mein cookie?

  • Was Cookies sind, den Sie erwarten, um zu sehen, in Chrome, gesetzt in FF? Beide Anträge haben eine Origin header.
  • Der Cookie-header.
InformationsquelleAutor Irate Pirate | 2014-06-11
Schreibe einen Kommentar