2015-03-11 4 views
9

द्वारा DELETE की अनुमति नहीं है I jQuery का उपयोग कर क्रोम से क्रॉस-उत्पत्ति DELETE अनुरोध भेजने का प्रयास कर रहा हूं।एक्सेस-कंट्रोल-स्वीट-मेथड

हालांकि, कि निम्न त्रुटि संदेश के साथ विफल डेवलपर कंसोल में लॉग इन किया जा रहा है:

XMLHttpRequest http://actual/url/here लोड नहीं कर सकता। एक्सेस-कंट्रोल-स्वीट-विधियों द्वारा विधि डिलीट की अनुमति नहीं है।

जावास्क्रिप्ट कोड स्थानीय होस्ट पर चल रहा है और इस तरह दिखता है:

$.ajax({ 
    type: "DELETE", 
    url: "http://actual/url/here", 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

यह इस तरह एक पूर्व उड़ान अनुरोध में परिणाम भेजा जा रहा है:

OPTIONS http://actual/url/here HTTP/1.1 
Host: actual 
Connection: keep-alive 
Access-Control-Request-Method: DELETE 
Origin: null 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36 
Access-Control-Request-Headers: accept 
Accept: */* 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 

और प्रतिक्रिया की तरह दिखता है यह:

HTTP/1.1 200 OK 
Cache-Control: must-revalidate, private 
Content-Length: 0 
Server: Microsoft-HTTPAPI/2.0 
Access-Control-Allow-Methods: DELETE GET HEAD POST PUT OPTIONS TRACE 
Access-Control-Allow-Headers: accept 
Access-Control-Max-Age: 900 
Access-Control-Allow-Origin: null 
Access-Control-Allow-Credentials: true 
Date: Wed, 11 Mar 2015 15:03:46 GMT 

जहां तक मैं बता सकता हूं कि यह ठीक है। ग्राहक DELETE को Access-Control-Request-Method: DELETE भेजकर चेक करता है और सर्वर कहता है कि Access-Control-Allow-Methods: DELETE GET HEAD POST PUT OPTIONS TRACE के साथ प्रतिक्रिया देकर इसकी अनुमति है।

हालांकि, DELETE अनुरोध कभी भेजा गया है और इसके बजाय त्रुटि संदेश (ऊपर) की सूचना दी गई है। क्यों?

+0

शायद तुम विकल्प नहीं संभाला है सर्वर पर नहीं ठीक से अन्य क्रियाओं के लिए पूर्वापेक्षा: http://stackoverflow.com/questions/20144847/slim-framework -jquery-ajax-request-method-delete-delete-allow-allow-access-access-access – XGreen

उत्तर

23

Access-Control-Allow-Methods का मूल्य एक अल्पविराम अलग की गई सूची की जरूरत है, न कि एक अंतरिक्ष एक अलग कर दिया।

MDN से:

Access-Control-Allow-Methods: <method>[, <method>]* 
+0

http://www.w3.org/TR/cors/#access-control-allow-methods-response-header का कहना है कि वाक्यविन्यास '" पहुंच-नियंत्रण-अनुमति-तरीके "है:" # विधि'। क्या हमें '#' को अल्पविराम से टोकन अलग करने के लिए कहता है? –

+3

"एक निर्माण" # "परिभाषित किया गया है, के लिए इसी तरह" * ", तत्वों की सूचियां निर्धारित करने के लिए। पूर्ण रूप है" # तत्व "कम से कम और सबसे तत्वों पर यह दर्शाता है, प्रत्येक एक या अधिक द्वारा अलग अल्पविराम (",") और वैकल्पिक रैखिक सफेद स्थान (एलडब्ल्यूएस)। " - http://tools.ietf.org/html/rfc2616#section-2.1 – Quentin

+0

उत्कृष्ट। आपका बहुत बहुत धन्यवाद! –