हेडर ने एक्सेस-कंट्रोल-अनुमति-उत्पत्ति को .htaccess में सेट नहीं किया है


91

मैं यह पता नहीं लगा सकता कि मेरी .htaccessहेडर सेटिंग्स काम क्यों नहीं करती हैं।

मेरी .htaccessफ़ाइल सामग्री:

Header set Access-Control-Allow-Origin *
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Allow-Headers "*"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

लेकिन जब मैं उन्हें हटा देता हूं Headerऔर उन्हें जोड़ देता हूं index.phpतो सबकुछ ठीक हो जाता है।

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: *");

मैं क्या खो रहा हूँ?

जवाबों:


135

यह काम करना चाहिए:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

46
Apache मॉड्यूल हेडरa2enmod headers
लुकास सेराफिम

1
यह निर्धारित किया गया: "एक्सेस-कंट्रोल-अलाउंस-मेथड्स द्वारा विधि PUT की अनुमति नहीं है"
राहुल प्रसाद

6
इसके अलावा, Header setइस मामले में उपयोग करना सबसे अच्छा है । यदि कोड बदला गया है और यह शीर्ष लेख को सेट करता है, तो अपाचे को header addडबल ** हेडर भेजना होगा। यह उदाहरण के लिए रेस्टैंगुलर जैसे ग्राहकों को तोड़ देगा।
जूलियन

2
यदि आवश्यक हो, तो मत भूलना,Header add Access-Control-Allow-Credentials "true"
मार्को

20

सिर्फ रिकॉर्ड के लिए, मैं ठीक उसी समस्या में चल रहा था और किसी भी जवाब ने काम नहीं किया।

मैंने हेडर चेकर टूल का उपयोग किया: http://www.webconfs.com/http-header-check.php

मैं अपने आईपी के साथ परीक्षण कर रहा था ( http://192.0.2.1/upload) और जो वापस आया वह निम्नलिखित था:

HTTP/1.1 301 Moved Permanently => 
Date => Sat, 10 Jan 2015 04:03:35 GMT
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
Location => http://192.0.2.1/upload/
Content-Length => 380
Connection => close
Content-Type => text/html; charset=iso-8859-1

एक पुनर्निर्देशन हो रहा था और AJAX अनुरोध पुनर्निर्देशन का सम्मान / पालन नहीं करता है।

यह डोमेन के अंत में गुम स्लैश निकला ( http://192.0.2.1.1/upload / )

मैंने अंत में स्लैश के साथ फिर से परीक्षण किया और मुझे यह नीचे मिला। स्क्रिप्ट में एक स्लैश भी जोड़ा, और यह अब काम कर रहा था।

HTTP/1.1 200 OK => 
Date => Sat, 10 Jan 2015 04:03:53 GMT
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By => PHP/5.3.8
Access-Control-Allow-Origin => *
Access-Control-Allow-Methods => PUT, GET, POST, DELETE, OPTIONS
Access-Control-Allow-Headers => *
Content-Length => 1435
Connection => close
Content-Type => text/html

यदि आपके हेडर अच्छे हैं और जो हो रहा है उसका निवारण करने के लिए इस टूल का उपयोग करें।


5
मेरे पास अभी 11 टैब खुले हैं जो इसे हल करने की कोशिश कर रहे हैं। यह उत्तर अधिक स्थानों पर होना चाहिए।
JDavis

मेरे साथ, मुझे अनुगामी स्लैश को हटाने की आवश्यकता थी। तो खुशी है कि मैंने यह पाया। जब मैं नया काम कर रहा हूं, तो उसे घंटों पहले करना चाहिए था।
गोरेलोग

11

GoDaddy पर मेरी एक साझा होस्टिंग है। मुझे इस प्रश्न का उत्तर भी चाहिए था, और आसपास खोज करने के बाद मैंने पाया कि यह संभव है।

मैंने एक .htaccess फ़ाइल लिखी है, इसे मेरे एक्शन पेज के समान फ़ोल्डर में डालें। यहाँ .htaccess फ़ाइल की सामग्री दी गई है:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

यहाँ मेरे ajax कॉल है:

    $.ajax({
        url: 'http://www.mydomain.com/myactionpagefolder/gbactionpage.php',  //server script to process data
        type: 'POST',
        xhr: function() {  // custom xhr
            myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){ // check if upload property exists
                myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
            }
            return myXhr;
        },
        //Ajax events
        beforeSend: beforeSendHandler,
        success: completeHandler,
        error: errorHandler,
        // Form data
        data: formData,
        //Options to tell JQuery not to process data or worry about content-type
        cache: false,
        contentType: false,
        processData: false
    });

संदर्भ के लिए यह लेख देखें:

हेडर ने एक्सेस-कंट्रोल-अनुमति-उत्पत्ति को .htaccess में सेट नहीं किया है


8

सावधान रहें:

 Header add Access-Control-Allow-Origin "*"

यह हर किसी को पहुंच प्रदान करने के लिए बिल्कुल भी न्यायसंगत नहीं है। केवल विश्वसनीय होस्ट की सूची की अनुमति देना बेहतर है ...

Header add Access-Control-Allow-Origin "http://aaa.example"
Header add Access-Control-Allow-Origin "http://bbb.example"
Header add Access-Control-Allow-Origin "http://ccc.example"

सादर,


3
यह काम नहीं करेगा। पहुँच-नियंत्रण-अनुमति-उत्पत्ति को कई मानों की अनुमति नहीं है। आपको ओरिजिनल रिक्वेस्ट हेडर के मूल्य के आधार पर हेडर को गतिशील रूप से सेट करने की आवश्यकता है।
Quentin

7

मैंने अपाचे मॉड्यूल हेडर a2enmod हेडर को सक्रिय किया, और समस्या हल हो गई है।


लॉग में त्रुटियां स्पष्ट नहीं थीं कि मैं जो बदलाव कर रहा था वह विफल क्यों हो गया और इस जवाब से बहुत हद तक मदद मिली। sudo a2enmod headersऔर एक पुनरारंभ यह काम कर रहा है!
cchana

3

बाहरी रूट फ़ोल्डर के .htaccess में इसे आज़माएँ

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

इस पर सावधान रहें: हेडर एक्सेस-कंट्रोल-अलाउंस-ओरिजिन-ओरिजिनल जोड़ें "*" यह हर किसी को एक्सेस देने के लिए बिल्कुल भी विवेकपूर्ण नहीं है। मुझे लगता है कि आपको उपयोगकर्ता होना चाहिए:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "http://example.com"
</IfModule>

3

मैं हेडर-चेकर साइट http://www.webconfs.com/http-header-check.php के लिंक के लिए Miro का जवाब +1 करूंगा । यह आपके द्वारा उपयोग किए जाने पर हर बार एक अप्रिय विज्ञापन को पॉप अप करता है, लेकिन फिर भी, यह एक्सेस-कंट्रोल-अलाउंस-ओरिजिन हेडर की उपस्थिति को सत्यापित करने के लिए बहुत उपयोगी है।

मैं अपने वेब पेज पर जावास्क्रिप्ट से एक .json फ़ाइल पढ़ रहा हूं। मैंने पाया कि मेरे .htaccess फ़ाइल में निम्न को जोड़ने पर IE 11 (संस्करण 11.447.14393.0) में मेरा वेब पेज देखने पर समस्या का समाधान हो गया:

<FilesMatch "\.(json)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

मैंने निम्नलिखित को /etc/httpd.conf (Apache की कॉन्फ़िगरेशन फ़ाइल) में भी जोड़ा है:

AllowOverride All

हेडर-चेकर साइट ने सत्यापित किया कि एक्सेस-कंट्रोल-अनुमति-उत्पत्ति हेडर अब भेजा जा रहा है (धन्यवाद, Miro!)।

हालाँकि, फ़ायरफ़ॉक्स 50.0.2, ओपेरा 41.0.2353.69, और एज 38.14393.0.0 सभी किसी भी तरह से एक्सेस-कंट्रोल- अलावे -हेडर के बिना ही फाइल लाते हैं । (ध्यान दें: वे IP पते की जाँच कर सकते हैं, क्योंकि मैं जिन दो डोमेन का उपयोग कर रहा था, वे दोनों एक ही सर्वर पर, एक हीvvv पते पर होस्ट किए गए हैं।)

हालाँकि, Chrome 54.0.2840.99 मीटर (64-बिट) पहुंच-नियंत्रण-अनुमति-मूल हेडर को अनदेखा करता है और किसी भी तरह से विफल रहता है, गलत तरीके से रिपोर्टिंग:

अनुरोधित संसाधन पर कोई 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' हेडर मौजूद नहीं है। उत्पत्ति ' {mydomain} ' इसलिए पहुँच की अनुमति नहीं है।

मुझे लगता है कि यह किसी प्रकार का "पहला" हो गया है। IE सही ढंग से काम कर रहा है; क्रोम, फ़ायरफ़ॉक्स, ओपेरा और एज सभी छोटी गाड़ी हैं; और Chrome सबसे खराब है । क्या यह सामान्य मामले के ठीक विपरीत नहीं है?


0

आधा दिन काम करने के बाद भी कुछ नहीं किया। हेडर चेक सेवा का उपयोग करना हालांकि सब कुछ काम कर रहा था। काम पर फ़ायरवॉल उन्हें छीन रहा था


0

इसे इस्तेमाल करे:

<IfModule mod_headers.c>
     Header set Access-Control-Allow-Credentials true
     Header set Access-Control-Allow-Origin "your domain"
     Header set Access-Control-Allow-Headers "X-Requested-With"
</IfModule>

विश्वसनीय होस्ट की सूची की अनुमति देना बेहतर है।


0

यदि कोई अन्य व्यक्ति यह कोशिश कर रहा है, तो सबसे अधिक उत्तर दिया गया जवाब काम करना चाहिए। हालाँकि, यदि आपके पास समस्याएँ हैं तो यह संभव हो सकता है कि ब्राउज़र ने REQUEST को कैश कर दिया है। एक क्वेरी स्ट्रिंग को जोड़ने की पुष्टि करने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.