Poniższe żądanie POST o charakterze krzyżowym z treścią typu multipart/danych formularzy i tylko proste nagłówki jest wstępnie oświetlone. Zgodnie ze specyfikacją W3C, chyba że źle ją odczytam, nie powinien on być podświetlony. Potwierdziłem, że dzieje się to w Chrome 27 i Firefox 10.8.3. Nie testowałem żadnych innych przeglądarek.Żądanie CORS jest wstępnie podświetlone, ale wygląda na to, że nie powinno to być
Oto nagłówki żądania, etc:
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
A oto opcje (preflight) prośba:
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
Spec wydaje się dość oczywiste:
- Tylko simple headers : SPRAWDŹ
- Tylko simple methods : Sprawdź
UPDATE: Oto niektóre proste kodu po stronie klienta, które będą powielać to:
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);
Czy ktoś wie dlaczego tak jest preflighted?
To niesamowite znalezisko! To dziwne, że kod po stronie klienta uruchamia preflight; nie ma w tym nic szczególnego. Również komentarz nie czyni rzeczy bardziej przejrzystymi. Zaleciłbym wprowadzenie tego na tablicach WebKit w celu wyjaśnienia. – monsur
@monsur Podejrzewam, że ta logika nie ogranicza się do Webkita. Podczas korzystania z przeglądarki Firefox napotkałem na ten sam problem. Nie testowałem jeszcze IE10. Zamierzam również rzucić okiem na źródło Firefoksa i sprawdzić, czy mogę potwierdzić moje podejrzenia. –
Czy możesz zaktualizować oryginalne pytanie tak, aby zawierało kod JavaScript po stronie klienta, którego używasz do wysłania tego żądania? Pomoże to uporządkować sprawy. – monsur