La seguente richiesta POST incrociata, con un tipo di contenuto di multipart/form-data e solo le intestazioni semplici è preflight. Secondo le specifiche del W3C, a meno che non lo legga male, non dovrebbe essere preflight. Ho confermato che ciò accade in Chrome 27 e Firefox 10.8.3. Non ho testato nessun altro browser.La richiesta CORS è preflight, ma sembra che non dovrebbe essere
Qui ci sono le intestazioni di richiesta, ecc:
Request URL:http://192.168.130.135:8081/upload/receiver
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:27129
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryix5VzTyVtCMwcNv6
Host:192.168.130.135:8081
Origin:http://192.168.130.135:8080
Referer:http://192.168.130.135:8080/test/raytest-jquery.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.37 Safari/537.36
E qui è la possibilità (preflight) Richiesta:
Request URL:http://192.168.130.135:8081/upload/receiver
Request Method:OPTIONS
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:192.168.130.135:8081
Origin:http://192.168.130.135:8080
Referer:http://192.168.130.135:8080/test/raytest-jquery.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.37 Safari/537.36
Le specifiche sembra abbastanza chiaro:
- Solo simple headers : CHECK
- Solo simple methods : CONTROLLO
UPDATE: Ecco alcune semplici codice lato client che riprodurre questo:
var xhr = new XMLHttpRequest(),
formData = new FormData();
formData.append('myfile', someFileObj);
xhr.upload.progress = function(e) {
//insert upload progress logic here
};
xhr.open('POST', 'http://192.168.130.135:8080/upload/receiver', true);
xhr.send(formData);
Qualcuno sa il motivo per cui questa viene preflight?
Questa è una scoperta incredibile! È strano per il codice lato client attivare un preflight; non c'è nulla nelle specifiche a riguardo. Anche il commento non rende le cose più chiare. Consiglierei di farlo presente sulle schede WebKit per chiarimenti. – monsur
@monsur Sospetto che questa logica non sia limitata a Webkit. Ho anche riscontrato lo stesso problema con Firefox. Non ho ancora testato IE10. Intendo dare una sbirciata anche alla fonte di Firefox e vedere se posso confermare il mio sospetto. –
È possibile aggiornare la domanda originale per includere il codice JavaScript sul lato client che si sta utilizzando per effettuare questa richiesta? Ciò contribuirà a mettere le cose nel contesto. – monsur