सवाल jQuery कोर सामग्री प्रकार के विकल्प


मुझे कस्टम सामग्री-प्रकार के साथ jQuery CORS का उपयोग करके AJAX बॉडी अनुरोध भेजने में समस्या है। मेरा कोड यहाँ है:

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

मुझे सामग्री-प्रकार को "एप्लिकेशन / जेसन" के रूप में सेट करने की आवश्यकता है क्योंकि इसे सर्वर की आवश्यकता है। लेकिन POST के रूप में अनुरोध भेजने के बजाय jQuery इसे विकल्प के रूप में भेजता है।

यहां एक शीर्षलेख है:

प्रतिक्रिया शीर्षलेख:

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

अनुरोध हेडर:

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 बहुत अच्छा काम करता है, सभी आवश्यक शीर्षलेख सर्वर द्वारा भेजते हैं, लेकिन यदि यह विकल्प प्रकार द्वारा भेजता है। क्या यह jQuery मुद्दा है?

jQuery - 1.8.1


44
2017-09-07 14:50


मूल




जवाब:


यह विकल्प अनुरोध सीओआरएस प्रीफलाइट अनुरोध है। यह एक अनुरोध है जो अनुरोध करने के लिए अनुमति मांगने के लिए वास्तविक अनुरोध से पहले सर्वर को भेजा जाता है। कस्टम सामग्री-प्रकार वास्तव में प्रीफलाइट को ट्रिगर कर रहा है। सीओआरएस स्पेक के अनुसार (http://www.w3.org/TR/cors/), कोई सामग्री-प्रकार अन्य आवेदन / एक्स-www-form-urlencoded, मल्टीपार्ट / फॉर्म-डेटा, या टेक्स्ट / सादा से प्रीफलाइट ट्रिगर करता है।

अगर आपके पास रिमोट सर्वर पर कोई नियंत्रण नहीं है, तो आपको या तो उन्हें सीओआरएस प्रीफलाइट का समर्थन करने के लिए कहा जाएगा, या जेएसओएन-पी जैसे कुछ अन्य विकल्प आज़माएं।

अगर आपके पास रिमोट सर्वर पर नियंत्रण है, तो आप इसे प्रीफ्लोइट्स को संभालने के लिए बदल सकते हैं। प्रीफलाइट अनुरोध को संभालने के लिए, आपको विकल्प अनुरोधों के जवाब में निम्न शीर्षलेख भेजना चाहिए:

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

प्रतिक्रिया एक HTTP 200 होना चाहिए Access-Control-Allow-Methods प्रतिक्रिया शीर्षलेख या तो के मूल्य गूंज सकता है Access-Control-Request-Method, या यह सिर्फ हो सकता है GET, POST, PUT, DELETE सभी तरीकों का समर्थन करने के लिए। Access-Control-Allow-Headers प्रतिक्रिया शीर्षलेख में मानों को गूंजना चाहिए Access-Control-Request-Headers अनुरोध हेडर।

एक बार जब ब्राउज़र उन शीर्षकों को प्राप्त करता है, तो यह वास्तविक अनुरोध करेगा। आप यहां सीओआरएस प्रीफलाइट अनुरोधों के बारे में अधिक जान सकते हैं:

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


117
2017-09-07 15:06



आप। कर रहे हैं। ए गॉडसेन्ड। स्वीट-हेडर मुद्दे मुझे क्या मिला है। लेकिन आपके द्वारा पोस्ट किए गए कोड से अधिक, आपकी व्याख्या ने प्रकाश बल्ब को चमकने में मदद की ताकि मुझे यह पता लगाने में मदद मिल सके कि सब कुछ कैसे काम कर रहा है। धन्यवाद! - appsecguy
हाहा, धन्यवाद! - yos mishan
यह मेरे लिए काम नहीं करता है: / मैं बस इसे सर्वलेट फ़िल्टर में इस तरह से करता हूं - Adnane.T
हाय मॉन्सूर - क्या आप कृपया उत्तर दे सकते हैं stackoverflow.com/questions/32725249/...? धन्यवाद, नेहा - Prateek
धन्यवाद @ मॉन्सूर। आपकी व्याख्या में मदद मिली। - Uresh Kuruhuri