2012-08-27 14 views
12

मैं कुछ AJAX दो उप डोमेन के बीच काम करने की कोशिश कर रहा हूँ।CORS अपाचे में सक्षम है, लेकिन AJAX के काम नहीं कर रहा (क्रोम कहते हैं मूल की अनुमति नहीं)

rails.mydomain.com और mydomain.com

Apache में,/etc/apache2/साइटों से उपलब्ध/मैं अपने rails.mydomain.com फ़ाइल में:

<VirtualHost *:80> 
    Header add Access-Control-Allow-Origin "http://www.mydomain.com" 
    Header add Access-Control-Allow-Origin "http://www.dev-mydomain.com" 
</VirtualHost> 

बहरहाल, जब भी मैं http://www.dev-mydomain.com से एक सरल ajax परीक्षण अनुरोध करने की कोशिश, क्रोम में मुझे मिलता है: "XMLHttpRequest http://rails.mydomain.com/directory लोड नहीं कर सकता उत्पत्ति http://www.dev-mydomain.com पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति से अनुमति नहीं है।।"

किसी को भी पता है कि मैं क्या याद आ रही है?

+1

चेक बाहर [प्रवेश-सी ऑनट्रोल-अनुमति-उत्पत्ति एकाधिक मूल डोमेन] (http://stackoverflow.com/questions/1653308/access-control-allow-origin-multiple-origin-domains) –

+1

ठीक है, इसलिए मैंने पहले पोस्ट किया था, लेकिन मैंने पीछा किया दो "शीर्षलेख जोड़ें" बयान करने के बारे में प्रतिक्रिया। मैंने दूसरा ऐड स्टेटमेंट हटा दिया, और सिर्फ एक हैडर सेट है और यह काम करता है, हालांकि, मुझे अंततः दो मूल होने की आवश्यकता होगी ... क्या मुझे केवल दो सेट स्टेटमेंट करना चाहिए, या उस पोस्ट का कौन सा समाधान सबसे अच्छा तरीका है –

+0

yup , यह एक से अधिक सेटिंग के साथ बाहर निकलना। गूगल को इस एप को ठीक करने की जरूरत है। क्या उन्होंने पहले स्थान पर अजाक्स का आविष्कार नहीं किया? –

उत्तर

0

मैं कुछ सफलता के लिए rack-cors का इस्तेमाल किया है, बहुत सरल जोड़ने के लिए जब पार मूल ajax कर ...

2

आप इस कृपया कोशिश कर सकता है?

Gemfile करने के लिए

gem "rack-cors", "~> 0.2.7" 

config करने के लिए/application.rb

config.middleware.use Rack::Cors do |requests| 
    requests.allow do |allow| 
    allow.origins '*' 
    allow.resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options] 
    end 
end 

पुनः आरंभ सर्वर मत भूलना। फिर यह काम होना चाहिए।

+1

क्या यह सर्वर को कम सुरक्षित नहीं बना रहा है। – mindmyweb

3

Dahazer के लिंक बताते हैं के रूप में, सबसे अच्छा शर्त एक भी पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति हैडर निर्धारित है। यह निश्चित रूप से उत्पादन के लिए उपयुक्त नहीं है, लेकिन आप अपने देव मोड में Origin शीर्षलेख को फिर से प्रतिध्वनित कर सकते हैं।

आप अभी भी एक समस्या है, तो संभव है कि आपको जवाब में काफी पर्याप्त CORS हेडर की स्थापना नहीं कर रहे हैं। क्रोम में क्रॉस डोमेन ajax कर रही है, (jQuery मन का उपयोग नहीं) के मेरे अनुभव में, मैं भी निम्न हेडर सेट करने के लिए आवश्यक है:

Access-Control-Allow-Headers : X-Requested-With,Content-Type 

को देखते हुए मैं पोस्ट के अलावा अन्य HTTP तरीकों का उपयोग कर रहा था और प्राप्त यह भी था आवश्यक मुझे

Access-Control-Allow-Methods : GET,PUT,POST,DELETE 

स्थापित करने के लिए के लिए हालांकि, सब से ऊपर मैं पढ़ html5 CORS ट्यूटोरियल, विशेष रूप से CORS on the server अनुभाग सलाह देते हैं। यह आपको अपने विशिष्ट उपयोग मामले के आधार पर, सीओआरएस को कॉन्फ़िगर करने के विभिन्न तरीकों का एक अच्छा विचार देना चाहिए, सर्वर या क्लाइंट (अपने मामले में jquery के AJAX कॉन्फ़िगरेशन विकल्प) पर होना चाहिए।

2

मुझे हाल ही में यह समस्या थी। मैंने अपाचे में Access-Control-Allow-Origin* सेट किया था। हालांकि, क्रोम अभी भी मेरे क्रॉस-डोमेन अनुरोधों को अवरुद्ध कर रहा था, जबकि यह फ़ायरफ़ॉक्स में ठीक काम करता था।

मेरे लिए काम किया गया समाधान Access-Control-Allow-Methods हेडर OPTIONS, GET, POST के साथ हेडर जोड़ना था। इसे यहां पोस्ट करना, अगर किसी के पास भविष्य में एक ही समस्या है और अन्य समाधानों में से कोई भी काम नहीं करता है।

0

समस्या 4 अलग-अलग स्थानों में हो सकती है। आइए अपनी <virthualhost परिभाषा से शुरू करें। सबसे पहले, कुछ मॉड्यूल और कॉन्फ़िगरेशन सेटिंग्स हैं जिन्हें आपको अपनी vhost परिभाषा को इन सेटिंग्स को लागू करने की अनुमति देने की आवश्यकता है।

  • सुनिश्चित mod_headers सक्षम किया गया है
  • अपनी प्राथमिक अपाचे कॉन्फ़िग फ़ाइल सुनिश्चित करें एक AllowOverride सेटिंग है कि आपके vhosts अपने डिफ़ॉल्ट CORS सेटिंग्स

ओवरराइड करने के लिए के बाद आप उन लोगों में से दोनों किया है की अनुमति देता है, आप कर सकते हैं प्रदान की है, Access-Control-Allow-Origin सेटिंग का उपयोग करें कि आप भी एक DocumentRoot निर्देश का उपयोग

<VirtualHost *:80> 
    DocumentRoot /server/path/to/site/root 
    Header add Access-Control-Allow-Origin "mydomain.com" 
    Header add Access-Control-Allow-Origin "dev-mydomain.com" 
    Header set Access-Control-Allow-Methods "GET,POST,PUT,OPTIONS" 
</VirtualHost> 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^