jquery एक्सएचआर काम नहीं करता क्योंकि "एक्सेस-कंट्रोल-अनुमति-उत्पत्ति द्वारा मूल की अनुमति नहीं है"




apache ruby-on-rails-3 (3)

मैं रेल 3 के साथ एपीआई-सर्वर पर काम कर रहा हूं जो अब तक बहुत आसान है, लेकिन मैं हर समय एक त्रुटि के लिए दौड़ रहा हूं और मुझे यकीन नहीं है कि यह मेरे अपाचे सेटअप या रेल ऐप की वजह से है।

जब मैं http: //sample.domain/uri/id पर XHR, curl या HTTP-Client.app पटरियों या अपाचे द्वारा 404 या 403 के साथ उत्तर देता है तो एक HTTP डिलीइट या PUT अनुरोध करने की कोशिश करता है (ग्राहक पर निर्भर करता है। मुझे लगता है क्योंकि कॉर्स का) और सफ़ारी डेवलपर कंसोल का जवाब देता है

XMLHttpRequest cannot load http://sample.domain/uri/id. Origin http://web.client/ is not allowed by Access-Control-Allow-Origin.

मैं एक apache2 पर mod_rack उर्फ ​​mod_rails का उपयोग कर रहा हूँ और मेरे vhost वास्तव में इसमें शामिल हैं:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods POST,GET,DELETE,PUT,OPTIONS
Header set Access-Control-Allow-Headers X-Requested-With

अपाचे error_log निम्न त्रुटि के साथ प्रतिक्रिया करता है:

[Sat Oct 30 01:37:34 2010] [error] [client 22.222.222.22] client denied by server configuration: /path/to/rails/folder/public, referer: http://web.client/

Rails development.log साथ जवाब

Started OPTIONS "/uri/id" for 84.190.123.140 at 2010-10-30 03:18:42 +0200
ActionController::RoutingError (No route matches "/uri/id"):

और यहाँ मैं और न ही यकीन है कि विकल्प कॉल क्यों खाती है क्योंकि मैंने सोचा था कि यह केवल प्रीफलाइट होगा और निश्चित रूप से विकल्प के लिए कोई मार्ग नहीं है क्योंकि मैं डेलीट का जवाब देना चाहता हूं

यदि आपको इस समस्या को ठीक करने के बारे में कोई भी विचार है तो कृपया इसे मेरे साथ साझा करें

बहुत बहुत धन्यवाद डेविड


आपको ऑप्शन विधि का जवाब देना होगा। यह निर्धारित करने के लिए वास्तविक DELETE विधि से पहले भेजा जाता है कि क्या DELETE कमांड भेजने की अनुमति है - प्रीफलाइटिंग के रूप में जाना जाता है आप नियंत्रित कर सकते हैं कि प्रवेश-नियंत्रण-अधिकतम-आयु शीर्ष लेख के साथ कितने समय तक अनुमतियाँ मान्य हैं।

OPTIONS के आपके उत्तर में आप एक्सेस-कंट्रोल-अनुमति-मूल आदि भेजते हैं।

अगर यह मामला नहीं था तो कल्पना करो आप ऑब्जेक्ट को पहले ही हटा दिए हैं उसके बाद आप ACAO भेज देंगे। कौन से या अनुमति नहीं दी जा सकती है

मूल सर्वर के लिए यह सबसे अच्छा है कि या तो उन सर्वरों की एक वास्तविक सफेद सूची बनाएं जो पोस्ट कर सकते हैं / हटा सकते हैं, या अनुरोध सर्वर के डोमेन नाम को वापस तोड़ सकते हैं। एक "*" अनिवार्य रूप से CORS को अक्षम करता है और सभी प्रकार के हमलों के लिए उपयोगकर्ता को खोलता है।


यह एक अलग मुद्दे की तरह लगता है

आप कोर के लिए शीर्ष लेख के बारे में सही बातें कर रहे हैं आपके अपाचे कॉन्फ़िगरेशन में कुछ भी क्लाइंट को अस्वीकार कर रहा है। अपाचे को समान मूल नीति के बारे में बिल्कुल परवाह नहीं है, इसलिए आपके "क्लाइंट को सर्वर कॉन्फ़िगरेशन से इनकार किया गया" त्रुटि गलत Access डायरेक्टिव या कुछ इसी तरह की वजह से होगी।

जैसा सुझाव दिया गया है, सुनिश्चित करें कि आप curl -X OPTIONS http://sample.domain/uri/id पहले कर सकते हैं।


* निक्स सिस्टम में आपको पहले अपाचे में "हेडर" मॉड्यूल को सक्षम / सक्षम करने की आवश्यकता है

sudo a2enmod हेडर

तो, आपको अपने vhost में निम्नलिखित पंक्ति को शामिल करना होगा:

हैडर सेट एक्सेस-कंट्रोल-अनुमति-उत्पत्ति: "*"





http-method