Ho impostato un semplice modulo di caricamento file utilizzando la chiamata ajax di jQuery verso un dominio diverso. Il browser ha un cookie per il dominio e questo cookie viene inviato con la richiesta in Firefox. Tuttavia, il cookie non è presente in Chrome, con conseguente errore di accesso. Ho verificato che il cookie esiste in Chrome, non è appena stato inviato con la richiesta.Cookie CORS non inviato in Chrome
Chiamata ajax: Alcune di queste potrebbero non essere necessarie. È stato aggiunto il tentativo di soluzioni correlate e lasciato a dimostrare tali tentativi.
<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 invia le intestazioni corrette, tra cui cookie dell'utente
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
Ma Chrome non
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
Credo che il server è configurato correttamente per consentire questa origine e le credenziali , ma non vengono nemmeno inviati nella richiesta di Chrome. Nel caso in cui è rilevante, il mio server (php w/Zend) imposta
$this->_response->setHeader('Access-Control-Allow-Origin', 'http://phptest');
$this->_response->setHeader('Access-Control-Allow-Credentials', 'true');
non vedo alcuna OPZIONE richiesta di verifica preliminare sul server.
Perché Chrome non invia il mio cookie?
Quali cookie ci si aspetta di vedere in Chrome impostato in FF? Entrambe le richieste hanno un'intestazione 'Origin'. – Palpatim
L'intestazione del cookie. –