2011-08-10 16 views
18

मैं Access-Control-Allow-Origin पढ़ रहा हूं क्योंकि यह क्रॉस डोमेन अनुरोधों को अनुमति देने में प्रभावी लगता है क्योंकि मेरे पास बाहरी साइट तक पहुंच है। मेरा प्रश्न है कि मैं क्रॉस डोमेन अनुरोधों को अनुमति देने के लिए Access-Control-Allow-Origin का उपयोग कैसे करूं? मैंने कोशिश की यह (हंसते नहीं है) (वैसे सभी मैं चाहता हूँ एक भी नंबर के लिए है से, 1 या 0 वापस करने)मैं एक्सेस-कंट्रोल-ऑब्जेक्ट-उत्पत्ति का उपयोग कैसे करूं? क्या यह सिर्फ एचटीएमएल हेड टैग के बीच में जाता है?

<html> 
<head> 
Access-Control-Allow-Origin: * 
</head> 
<body> 
1 
</body> 
</html> 

हूँ मैं बंद? आपकी सहायता के लिए धन्यवाद. यदि एक सरल क्रॉस-डोमेन अनुरोध करने का कोई आसान तरीका है तो मुझे बताएं।

उत्तर

8

यह एक HTTP शीर्षलेख है। आप इस शीर्षलेख को आदर्श रूप से भेजने के लिए अपने वेबसर्वर या वेबपैप को कॉन्फ़िगर करेंगे। शायद htaccess या PHP में।

वैकल्पिक रूप से आप

<head>...<meta http-equiv="Access-Control-Allow-Origin" content="*">...</head> 

उपयोग करने के लिए मुझे लगता है कि अगर काम करेगा पता नहीं है सक्षम हो सकता है। सभी HTTP शीर्षलेख सीधे HTML में कॉन्फ़िगर नहीं किए जा सकते हैं।

यह कई HTTP शीर्षकों के विकल्प के रूप में काम करता है, लेकिन नीचे @EricLaw की टिप्पणी देखें। यह विशेष हेडर अलग है।

चेतावनी

इस उत्तर कैसे हेडर स्थापित करने के लिए के बारे में सख्ती से है। मैं क्रॉस डोमेन अनुरोधों को अनुमति देने के बारे में कुछ भी नहीं जानता।

HTTP हेडर बारे

हर अनुरोध और प्रतिक्रिया हेडर है। ब्राउज़र वेबसर्वर

GET /index.htm HTTP/1.1 

तब को यह भेजता हेडर

Host: www.example.com 
User-Agent: (Browser/OS name and version information) 
.. Additional headers indicating supported compression types and content types and other info 

तब सर्वर एक प्रतिक्रिया

Content-type: text/html 
Content-length: (number of bytes in file (optional)) 
Date: (server clock) 
Server: (Webserver name and version information) 

अतिरिक्त हेडर उदाहरण Cache-Control के लिए विन्यस्त किया जा सकता भेजता है, यह सब पर निर्भर करता है आपकी भाषा (PHP, CGI, जावा, htaccess) और वेबसर्वर (अपाचे, आदि)।

1) सीधे PHP जैसे एक templating भाषा का प्रयोग पेज में हैडर सेट करें:

+6

का उपयोग करके असीमित CORS को अनुमति दें * यह * HTTP शीर्षलेख में होना चाहिए। शरीर में इसका समर्थन एक सुरक्षा बग होगा। – EricLaw

+0

खुशी है कि आपने इसका उल्लेख किया है। मैं वास्तव में नहीं जानता कि यह क्रॉस-डोमेन सामग्री कैसे काम करती है। मैं अपना जवाब संपादित करूंगा। –

+0

उत्तर के लिए धन्यवाद। अब मैं सिर्फ एक वेब होस्ट खोजने की कोशिश कर रहा हूं जो मुझे http शीर्षलेखों को बदलने देता है। – davis

15

वहाँ क्रॉस डोमेन मूल अनुमति देने के लिए 3 तरीके (jsonp को छोड़कर) कर रहे हैं। ध्यान रखें कि आपके हेडर से पहले कोई HTML नहीं हो सकता है या यह असफल हो जाएगा।

<?php header("Access-Control-Allow-Origin: http://example.com"); ?> 

2) सर्वर कॉन्फ़िगरेशन फ़ाइल (apache.conf) संशोधित करें और इस लाइन में जोड़ें। ध्यान दें कि "*" सभी को अनुमति देता है। कुछ सिस्टम को क्रेडेंशियल सेट की भी आवश्यकता हो सकती है।अपने कॉन्फ़िग फ़ाइल

<IfModule mod_headers.c> 
    SetEnvIf Origin "http(s)?://(www\.)?(example.org|example.com)$" AccessControlAllowOrigin=$0$1 
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
    Header set Access-Control-Allow-Credentials true 
</IfModule> 

4) विकास उपयोग के लिए के लिए निम्न जोड़

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Credentials true 

3) अपाचे वेब सर्वर पर एकाधिक डोमेन की अनुमति देना: सामान्य तौर पर अनुमति देने के सभी पहुँच एक सुरक्षा जोखिम है और बचा जाना चाहिए केवल अपने ब्राउज़र को हैक करें और क्रोम Allow-Control-Allow-Origin extension

+0

स्थानीय विकास के लिए सबसे आसान तरीका केवल कॉर्स एक्सटेंशन – kelevra88

+13

जोड़ना है जो अनजाने में परीक्षण में काम करने वाले कोड को बनाने का सबसे आसान तरीका है लेकिन उत्पादन में रहस्यमय रूप से विफल रहता है विस्तार को जोड़ना। ;) – dannysauer

+0

क्या आप इस एक्सटेंशन का उपयोग करने के तरीके पर एक उदाहरण प्रदान कर सकते हैं? मुझे यह काम नहीं मिल रहा है और ऐसा कोई प्रतीत नहीं होता है। हालांकि मैंने "अवरुद्ध यूआरएल या यूआरएल पैटर्न" सेटिंग में रिमोट एड्रेस सेट अप किया है, फिर भी मैं देव टूल्स के माध्यम से संदेश देख रहा हूं, यह बताते हुए कि सीओआरएस के कारण एक्सेस अवरुद्ध कर दी गई है। और वहां एक "एक्सेस-कंट्रोल-एक्सपोज़-हेडर" सेटिंग है जो मुझे नहीं पता कि इसके लिए क्या है। मुझे नहीं पता कि यह मेरी गलती है या एक्सटेंशन अब और काम नहीं कर रहे हैं। – Pere