opcje typu zawartości jQuery CORS
Mam problem z wysłaniem AJAX body request za pomocą jQuery CORS z niestandardowym Content-type. Oto Mój kod:
$.ajax({
url: "http://some-other-domain/my-path",
type: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify({
key: 1,
key2: 2
}),
statusCode: {
200: function(data) {
}
},
xhrFields: {
withCredentials: true
},
crossDomain: true
});
Muszę ustawić Content-type jako "application / json", ponieważ wymaga strony serwera. Ale zamiast wysyłać żądanie jako POST jQuery wysyła to jako opcje.
Oto nagłówek:
Nagłówki Odpowiedzi:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 03:00:00 EET
Set-Cookie: JSESSIONID=BB9D6783E58FB0F2ADE1924A2F0CBA52; Path=/
Content-Type: text/html;charset=UTF-8
Content-Length: 6233
Date: Fri, 07 Sep 2012 14:41:13 GMT
Nagłówki Żądania:
OPTIONS /my-path HTTP/1.1
Host: MY-HOME-NAME
User-Agent: MY_USER_AGEMT
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: HERE-GOES-DOMAIN
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
CORS działa świetnie, wszystkie wymagane nagłówki są wysyłane przez serwer, ale nie, jeśli wysyła przez opcje Typ. Czy to problem z jQuery?
JQuery-1.8.1
1 answers
To żądanie opcji jest żądaniem inspekcji wstępnej CORS. Jest to żądanie, które jest wysyłane do serwera przed rzeczywistym żądaniem, aby poprosić o uprawnienia do złożenia żądania. Niestandardowy typ zawartości powoduje w rzeczywistości inspekcję wstępną. Zgodnie ze specyfikacją CORS ( http://www.w3.org/TR/cors/), dowolny Content-Type Inny niż application/x-www-form-urlencoded, multipart/form-data lub text / plain uruchamia inspekcję wstępną.
Jeśli nie masz kontroli nad zdalnym serwerem, następnie musisz poprosić ich o obsługę wstępnej inspekcji CORS lub wypróbować inną opcję, taką jak JSON-P.]}
Jeśli masz kontrolę nad serwerem zdalnym, możesz zmienić go na obsługę preflightów. Aby obsłużyć żądanie inspekcji wstępnej, należy wysłać następujące nagłówki w odpowiedzi na żądanie opcji:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Content-Type
Odpowiedzią powinien być HTTP 200. Nagłówek odpowiedzi Access-Control-Allow-Methods
może albo echo wartości Access-Control-Request-Method
, albo może być po prostu GET, POST, PUT, DELETE
, aby obsługiwać wszystkie metody. Na Access-Control-Allow-Headers
nagłówek odpowiedzi powinien odzwierciedlać wartości w nagłówku zapytania Access-Control-Request-Headers
.
Gdy przeglądarka otrzyma te nagłówki, wyśle rzeczywiste żądanie. Możesz dowiedzieć się więcej o żądaniach inspekcji wstępnej CORS tutaj:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 15:33:25