Soru jQuery CORS İçerik türü SEÇENEKLER


Özel İçerik türü ile jQuery CORS kullanarak AJAX vücut isteği göndermekle ilgili bir sorunum var. İşte kodum:

$.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
});

İçerik türünü sunucu tarafı gerektirdiğinden "application / json" olarak ayarlamalıyım. Ancak POST olarak istek göndermek yerine jQuery bunu OPTIONS olarak gönderir.

İşte bir başlık:

Yanıt Başlıkları:

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

İstek Başlıkları:

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 harika çalışıyor, gerekli tüm üstbilgiler sunucu tarafından gönderiliyor, ancak OPTIONS türüne göre gönderiliyorsa değil. JQuery sorunu mu?

jQuery - 1.8.1


44
2017-09-07 14:50


Menşei




Cevaplar:


Bu OPTIONS isteği CORS ön kontrol talebi. İsteği yapmak için izin istemek için gerçek istek öncesi sunucuya gönderilen bir istektir. Özel İçerik Türü aslında ön fareyi tetikliyor. CORS şartnamesine göre (http://www.w3.org/TR/cors/), herhangi bir İçerik Türü diğer uygulama / x-www-form-urlencoded, multipart / form-data veya text / plain'dan daha önceliklidir.

Uzak sunucu üzerinde herhangi bir kontrole sahip değilseniz, ya CORS ön kontrolünü desteklemelerini istemeniz ya da JSON-P gibi başka bir seçeneği denemeniz gerekecektir.

Uzak sunucu üzerinde kontrolünüz varsa, ön farları işlemek için değiştirebilirsiniz. Bir ön kontrol isteğini işlemek için, aşağıdaki başlıkları OPTIONS isteğine yanıt olarak göndermelisiniz:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Content-Type

Yanıt bir HTTP 200 olmalıdır. Access-Control-Allow-Methods Yanıt üstbilgisi ya Access-Control-Request-Methodya da sadece olabilir GET, POST, PUT, DELETE tüm yöntemleri desteklemek. Access-Control-Allow-Headers yanıt üstbilgisinde değerler Access-Control-Request-Headers istek başlığı.

Tarayıcı bu başlıkları aldığında, gerçek isteği yapacaktır. CORS ön kontrol talepleri hakkında daha fazla bilgiyi buradan edinebilirsiniz:

http://www.html5rocks.com/en/tutorials/cors/


117
2017-09-07 15:06



Sen. Are. A. Godsend. İzin Verme Başlıkları sorunu beni neyin aldığını. Ancak, yayınladığınız koddan daha fazlası, açıklamanız, her şeyin nasıl çalışacağını anlamaya yardımcı olmak için ampulün kıvılcımlanmasına yardımcı oldu. Teşekkürler! - appsecguy
haaaaaaa, teşekkürler! - yos mishan
Benim için işe yaramıyor: / Sadece bir süzgeç filtresinde bu şekilde yapıyorum - Adnane.T
Merhaba Monsur - Lütfen cevap verir misiniz stackoverflow.com/questions/32725249/...? Teşekkürler Neha - Prateek
Teşekkürler @monsur. Açıklamanız yardımcı oldu. - Uresh Kuruhuri