हेडर के बावजूद फ़ायरफ़ॉक्स 'क्रॉस-ऑरिजिन रिक्वेस्ट ब्लॉक्ड'


119

मैं एक साधारण क्रॉस-मूल अनुरोध करने की कोशिश कर रहा हूं, और फ़ायरफ़ॉक्स लगातार इसे इस त्रुटि के साथ अवरुद्ध कर रहा है:

क्रॉस-ऑरिजिन रिक्वेस्ट ब्लॉक किया गया: समान उत्पत्ति पॉलिसी दूरस्थ संसाधन [url] को पढ़ना बंद कर देती है। यह संसाधन को उसी डोमेन पर ले जाकर या CORS को सक्षम करके तय किया जा सकता है। [Url]

यह क्रोम और सफारी में ठीक काम करता है।

जहाँ तक मैं बता सकता हूँ कि मैंने इसे काम करने की अनुमति देने के लिए अपने PHP पर सभी सही हेडर सेट किए हैं। यहाँ मेरा सर्वर क्या जवाब दे रहा है

HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html

मैंने Angular, jQuery और एक बुनियादी XMLHTTPRequest ऑब्जेक्ट का उपयोग करने की कोशिश की है, जैसे:

var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()

... और यह फ़ायरफ़ॉक्स को छोड़कर हर ब्राउज़र में काम करता है। क्या कोई इसके लिए सहायता कर सकता है?


क्या आप सभी अनुरोधों और प्रतिक्रियाओं का पूरा पता लगा सकते हैं? या कम से कम एक परीक्षण साइट प्रदान करें? यदि वेबसाइट दूरस्थ मूल http, https, फ़ाइल को एक्सेस कर रही है? mozSystemनियमित वेबसाइटों के लिए समर्थित नहीं है, बस फ़ायरफ़ॉक्स-ओएस ऐप पैक किया गया है , इसलिए उस विकल्प को छोड़ दें।
नैमायर

1
@ GET के बजाय POST के रूप में भेजने पर हेडर: Accept application/json, text/plain, */* Accept-Encoding gzip, deflate Accept-Language en-US,en;q=0.5 Content-Length 35 Content-Type application/x-www-form-urlencoded; charset=UTF-8 Host [url] Origin [url] Referer [referrer url] User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0 त्रुटि:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at [url]. This can be fixed by moving the resource to the same domain or enabling CORS. [url]
Godwhacker

2
@nmai दरअसल यह प्रतीत होता है कि यह उस साइट पर सुरक्षा प्रमाणपत्र के साथ किसी प्रकार की समस्या है जिस पर मैं पहुँच रहा हूँ- फ़ायरफ़ॉक्स सिर्फ एक सहज त्रुटि दे रहा है। अगर मैं साइट को अपवादों की सूची में जोड़ता हूं तो यह ठीक काम करता है।
गॉडवॉकर

जवाबों:


121

यह पता चला है कि इसका कोर्स से कोई लेना-देना नहीं है- यह सुरक्षा प्रमाणपत्र के साथ एक समस्या थी। भ्रामक त्रुटियां = सिरदर्द के 4 घंटे।


3
बस यह सटीक समस्या थी, त्रुटि बहुत सामान्य है और उस पर क्रोम और फ़ायरफ़ॉक्स अलग-अलग प्रमाण पत्र स्टोर का उपयोग करते हैं, इसलिए इसे डीबग करना कठिन है। मुझे संदेह होना चाहिए था कि जब मेरे प्रॉक्सी ने कोई विकल्प अनुरोध पर कब्जा नहीं किया था (यह SSL हैंडशेक पर टूट रहा था)।
डैनियल कोर्रेया

4
गॉडवॉकर, मैं उसी समस्या में हूं, शायद। आपको यह कैसे पता चला कि यह सुरक्षा प्रमाणपत्र था? आप इसे कहां देख सकते हैं?
सिंह

9
मेरे मामले में मेरे पास एक कोणीय ऐप था जो दूसरे सर्वर पर कॉल कर रहा था, दोनों आंतरिक रूप से हस्ताक्षरित प्रमाण पत्र का उपयोग कर रहे थे। हालाँकि, फ़ायरफ़ॉक्स स्वचालित रूप से प्रमाणपत्र पर भरोसा नहीं करता है क्योंकि यह एक सार्वजनिक प्राधिकरण द्वारा मान्यता प्राप्त नहीं है। इसलिए मुझे यह सुनिश्चित करने की आवश्यकता थी कि इस समस्या के दूर होने से पहले दोनों सर्वरों के लिए फ़ायरफ़ॉक्स में अपवादों को जोड़ा गया था।
सैम कैलोरी

3
मेरे लिए withCredentials=trueएक्सएचआर उदाहरण पर तय करना था ; अन्यथा अनुरोध करते समय फ़ायरफ़ॉक्स क्लाइंट सर्टिफ़िकेट का उपयोग करने में विफल रहा (क्रोम में ठीक काम किया, हालांकि)।
क्लिंट हैरिस

1
@SamStorie द्वारा टिप्पणी इस उत्तर की तुलना में उत्तर की तरह लगती है। धन्यवाद
नागा

26

मैंने पाया कि मेरी समस्या यह थी कि जिस सर्वर पर मैंने अनुरोध किया था, उसके पास एक प्रमाण पत्र था, जिस पर भरोसा नहीं किया गया था।

यदि आप किसी क्रॉस डोमेन से जुड़ना चाहते हैं https , तो आपको पहले इस प्रमाणपत्र के लिए एक अपवाद जोड़ना होगा।

आप एक बार अवरुद्ध लिंक पर जाकर अपवाद जोड़ सकते हैं।


5
जब तक कि आप खुश न हों, किसी को भी आपकी साइट पर आने में मदद नहीं मिलती, जब तक कि आप यह कहते हुए खुश न हों कि 'यदि आप फ़ायरफ़ॉक्स का उपयोग कर रहे हैं, तो कृपया इस साइट पर जाएँ और इसे अपनी अपवाद सूची में शामिल करें'
Godwhacker

@ Cracker0dks "अवरुद्ध लिंक पर एक बार जाएं और अपवाद जोड़ें" क्या आप इस बात को विस्तृत कर सकते हैं कि अपवाद को कहां जोड़ा जाए? मैं फ़ायरफ़ॉक्स क्वांटम का उपयोग कर रहा हूँ। टीआईए
पॉल

1
आप लिंक फ़ायरफ़ॉक्स पर सर्फ करने के बारे में direktly शिकायत कर रहा है। फिर आपको प्रमाणपत्र की चेतावनी मिलती है। प्रमाण पत्र की अनुमति दें। अपनी प्राथमिक साइट पर फिर से जाएँ।
Cracker0dks

26

मुझे यह सवाल आया था कि फ़ायरफ़ॉक्स में अनुरोधों को संदेश के साथ अवरुद्ध किया जा रहा था:

कारण: CORS अनुरोध सफल नहीं हुआ

अपने बालों को खींचने के बाद मुझे पता चला कि एक नया स्थापित फ़ायरफ़ॉक्स एक्सटेंशन, प्राइवेसी बैजर, अनुरोधों को रोक रहा था।

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

कारण देखें : CORS अनुरोध विवरण के लिए MDN पर सफल नहीं हुआ


आपने यह कैसे पता लगाया कि एक्सटेंशन किस अनुरोध को रोक रहा है? मुझे वही समस्या हो रही है, क्योंकि अनुरोध फ़ायरफ़ॉक्स में एक नए प्रोफ़ाइल (इसलिए कोई एक्सटेंशन नहीं) के साथ सफल होता है
सिप्रियन टॉमोयागै

1
मैंने यह देखने के लिए प्रत्येक एक्सटेंशन पर क्लिक किया कि क्या उस विशेष साइट के लिए सामग्री को अवरुद्ध करने का कोई उल्लेख था जिसके साथ मैं एक समस्या थी। घोस्टरी में एक प्रविष्टि थी इसलिए मैंने साइट को विश्वसनीय के रूप में चिह्नित किया, पृष्ठ को फिर से लोड किया, और अनुरोध सफल हुए।
को प्रोग्रामिंग के प्रोफेसर

1
धन्यवाद! मैंने एक्सटेंशन प्रोजेक्ट इनसाइट की भी खोज की है जो सभी एक्सटेंशन की अनुमतियों का अवलोकन देता है। addons.mozilla.org/en-US/firefox/addon/project-insight
सिप्रियन टॉमोयागै

1
@ कवच ओफ़। मेरे लिए प्राइवेसी बैजर भी। धन्यवाद।
जेसन लीच

13

मुझे 2 दिनों के बाद समाधान मिला है :(।

महत्वपूर्ण नोट: जब एक क्रेडेंशियल अनुरोध का जवाब दिया जाता है, तो सर्वर को एक डोमेन निर्दिष्ट करना चाहिए, और वाइल्ड कार्डिंग का उपयोग नहीं किया जा सकता है।

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials


12

यदि आपके पास 'वास्तविक' प्रमाणपत्र नहीं है (और इस तरह से स्व-हस्ताक्षरित एक का उपयोग करके), तो फायरफॉक्स में आप निम्न जा सकते हैं:

Options > Privacy & Security > (scroll to the bottom) View Certificates > Add Exception.

वहां, स्थान भरें, जैसे: https: //wwww.myserver: myport


मेरे लिए यह तब काम आया जब मेरी CORS त्रुटि के साथ फ़ायरफ़ॉक्स को छोड़कर अन्य सभी ब्राउज़रों में काम करती है -> क्रॉस-ऑरिजिन रिक्वेस्ट ब्लॉक्ड: द सेम ओरिजिन पॉलिसी स्थानीयहोस्ट में दूरस्थ संसाधन को पढ़ना बंद कर देती है : 44304 / v1 / खोज । (कारण: CORS अनुरोध सफल नहीं हुआ)।
JGilmartin

5

सिर्फ चेतावनी का एक शब्द। मैं अंत में फ़ायरफ़ॉक्स और कोर के साथ समस्या के आसपास हो गया।

मेरे लिए समाधान यह पोस्ट था

सही प्रतिक्रिया हेडर के माध्यम से अपाचे पर कोर्स (क्रॉस-ऑरिजनल रिसोर्स शेयरिंग) की स्थापना के माध्यम से सब कुछ की अनुमति देता है बेंजामिन हॉर्न

हालाँकि, फ़ायरफ़ॉक्स वास्तव में, वास्तव में अपाचे सर्वर (फ़ोल्डर में .htaccess) पर हेडर सेट करने के बाद अजीब व्यवहार कर रहा था।

मैंने बहुत कुछ जोड़ा console.log("Hi FF, you are here A") यह देखने के लिए कि क्या चल रहा है।

पहले तो ऐसा लग रहा था कि इसने फांसी लगा ली xhr.send()। लेकिन तब मुझे पता चला कि यह इस कथन के लिए नहीं है। मैंने console.logइसके पहले एक और अधिकार रखा और वहां नहीं पहुंचा - भले ही आखिरी console.logऔर नए के बीच कुछ भी नहीं था । बस दो के बीच रुक गईconsole.log

फ़ाइल में कोई भी अजीब चरित्र था, यह देखने के लिए, हटाने वाली रेखाएँ, हटाना। मुझे कुछ नहीं मिला।

फ़ायरफ़ॉक्स को फिर से शुरू करने से परेशानी बढ़ गई।

हां, मुझे बग दर्ज करना चाहिए। यह सिर्फ इतना है कि यह बहुत अजीब है इसलिए यह नहीं पता कि इसे कैसे पुन: पेश करना है।

सूचना : और, ओह, मैंने सिर्फ भाग किया Header always set, Rewrite*भाग नहीं !


आज मेरे लिए वही कहानी, अनिवार्य रूप से। फ़ायरफ़ॉक्स को पुनः आरंभ करके इसे ठीक कर दिया। 5 साल से अधिक समय बाद।
सोरेन मोर्टेंसन

3

बस जोड़ दो

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

करने के लिए .htaccessवेबसाइट के रूट में फ़ाइल आप के साथ कनेक्ट करने की कोशिश कर रहे हैं।


यदि आप इसे कहीं से अनुरोध स्वीकार करने के लिए सेट करना चाहते हैं तो यह ठीक है; ठीक नहीं है यदि आप नहीं करते हैं, जो हैडर का पूरा बिंदु है।
गॉडवॉकर

2

पोस्टरिटी के लिए, यह देखने के लिए सर्वर लॉग की भी जांच करें कि अनुरोध किया जा रहा संसाधन 200 वापस आ रहा है या नहीं।

मैं एक ऐसे ही मुद्दे पर भाग गया, जहाँ सभी उचित हेडर को प्री-फ़्लाइट अजाक्स अनुरोध में वापस किया जा रहा था, लेकिन ब्राउज़र ने बताया कि खराब कोरस हेडर के कारण वास्तविक अनुरोध अवरुद्ध हो गया था।

पता चला, अनुरोध किया जा रहा पृष्ठ खराब कोड के कारण 500 त्रुटि लौटा रहा था, लेकिन केवल तभी जब इसे CORS के माध्यम से लाया गया था। ब्राउज़र (क्रोम और फ़ायरफ़ॉक्स दोनों) ने गलती से सूचना दी कि पृष्ठ पर एक 500 वापस करने के बजाय एक्सेस-कंट्रोल-अनुमति-उत्पत्ति हेडर गायब था।


1

यह कोशिश करो, यह आपके मुद्दे को हल करना चाहिए

  1. अपने config.php में, अपने domain.com में www प्री जोड़ें। उदाहरण के लिए:

    HTTP define('HTTP_SERVER', 'http://domain name with www/');
    HTTPS define('HTTPS_SERVER', 'http://domain name with www/');
  2. इसे अपनी .htaccess फ़ाइल में जोड़ें

    RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]

1

मेरे लिए, यह पता चलता है कि मैं Access-Control-Allow-Originएक विशिष्ट (और सही) के लिए प्रतिक्रिया हेडर सेट कर रहा था, host.comलेकिन इसे http://host.comबदले में वापस करना पड़ा । फ़ायरफ़ॉक्स क्या करता है? यह चुपचाप जीईटी अनुरोध को निगल लेता है और एक्सएचआर को एक स्थिति 0 देता है, जिसमें जावास्क्रिप्ट कंसोल के लिए कोई चेतावनी नहीं है, जबकि अन्य समान विफलताओं के लिए यह कम से कम कुछ कहना होगा। ऐ आइ।


1
लगता है कि इस योजना की उम्मीद है, उदाहरण को w3.org/TR/cors पर देख रहा है, लेकिन वैसे भी धन्यवाद, मैं भी गलत काम कर रहा था, और हाँ, फ़ायरफ़ॉक्स त्रुटि संदेश की कमी है।
रिचर्ड ग्रीन

1

डिबग करने के लिए, यदि संभव हो तो सर्वर लॉग की जाँच करें। फ़ायरफ़ॉक्स कारण की एक पूरी श्रृंखला के लिए कंसोल में त्रुटि CORS देता है।

कारणों में से एक uMatrix भी है (और मुझे लगता है कि NoScript और इसी तरह का भी) प्लगइन है।


0

मुझे भी इसी तरह की समस्या का सामना करना पड़ा, और मुझे लगता है कि यह पंजीकृत होना वैध है कि मैंने इसे कैसे तय किया:

मेरे पास एक सिस्टम है जो मूल रूप से सिम्फनी 3 पर बनाया गया है। स्वयं सीखने और प्रदर्शन के उद्देश्यों के लिए मैंने GoLang का उपयोग करके कुछ स्क्रिप्ट लिखने का फैसला किया, साथ ही, सार्वजनिक पहुंच के साथ एक एपीआई।

माई गो एपीआई को उम्मीद है कि जोंस फॉरमेट परमेस होंगे, और जोंस फॉरमैट रिस्पांस भी लौटाएंगे

उन GoApi को कॉल करने के लिए, मैं उपयोग कर रहा हूं, सबसे अधिक, $ .ajax (jQuery) पहला परीक्षण एक धोखा था: (संयुक्त राष्ट्र) प्रसिद्ध "क्रॉस-ऑरिजिनल अनुरोध अवरुद्ध" पॉप अप! फिर, मैंने "एक्सेस-कंट्रोल-अलाउंस-ओरिजिन: *" सेट करने की कोशिश की, अपाचे कॉन्फिडेंस पर, htaccess, php, जावास्क्रिप्ट और कहीं भी मैं गूगल पर पा सकता था!

लेकिन, यहां तक ​​कि, एक ही निराशाजनक त्रुटि !!!

समाधान सरल था: मुझे "GET" के बजाय "POST" अनुरोध करना पड़ा।

यह प्राप्त करने के लिए कि मुझे GET का उपयोग करने के लिए GoLang और JavaScript दोनों को समायोजित करना होगा! एक बार जब यह हो गया, तो मेरे लिए और कोई क्रॉस-ऑरिजनल रिक्वेस्ट ब्लॉक नहीं हुई !!!

आशा करता हूँ की ये काम करेगा

पुनश्च:

मैं निर्देशिका ब्लॉक मेरे पास अपाचे और Vhost का उपयोग कर रहा हूं

  Header always set Access-Control-Allow-Origin "*"
  Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"

याद रखें: "*" का अर्थ है कि आप किसी से अनुरोध स्वीकार करेंगे !!! (जो एक सुरक्षा की कमी हो सकती है) मेरे मामले में यह ठीक है, क्योंकि यह एक सार्वजनिक एपीआई होगा

PS2: माई हेडर्स

प्रतिक्रिया देने वाले हेडर

Access-Control-Allow-Credentials    true
Access-Control-Allow-Headers    Authorization
Access-Control-Allow-Methods    GET, POST, PUT
Access-Control-Allow-Origin http://localhost
Content-Length  164
Content-Type    application/json; charset=UTF-8
Date    Tue, 07 May 2019 20:33:52 GMT

अनुरोध हेडर (469 बी)

Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection  keep-alive
Content-Length  81
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Host    localhost:9003
Origin  http://localhost
Referer http://localhost/fibootkt/MY_app_dev.php/MyTest/GoAPI
User-Agent  Mozilla/5.0 (Macintosh; Intel …) Gecko/20100101 Firefox/66.0

0

यदि उपर्युक्त उत्तर मदद नहीं करते हैं, तो जांचें कि बैकएंड सर्वर ऊपर है और चल रहा है या नहीं के रूप में मेरे मामले में सर्वर दुर्घटनाग्रस्त हो गया और यह त्रुटि पूरी तरह से भ्रामक है।


0

मेरे मामले में यह मेरा ADBLOCKER था ! किसी कारण से यह मेरे लोकलहोस्ट पर सक्षम हो गया और फ़ायरफ़ॉक्स में इस त्रुटि का कारण बना।

इसे अक्षम करना या प्लगइन को अनइंस्टॉल करना इसे ठीक करना चाहिए।

आपके मामले में, यह एक एडब्लॉकर नहीं बल्कि दूसरा फ़ायरफ़ॉक्स प्लगइन हो सकता है। यह पता लगाने के लिए कि कोई समस्या है या नहीं और फिर व्यवस्थित रूप से प्लगइन्स को तब तक अक्षम करें, जब तक आप अपराधी को ढूंढ न लें।


-3

फाइलें स्व व्याख्यात्मक हैं। एक फ़ाइल बनाओ, इसे कुछ भी कहो। मेरे मामले में jq2.php।

<html>
<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
    // document is made ready so that the program starts when we load this page       
    $(document).ready(function(){

        // it tells that any key activity in the "subcat_search" filed will execute the query.
        $("#subcat_search").keyup(function(){

            // we assemble the get link for the direction to our engine "gs.php". 
            var link1 = "http://127.0.0.1/jqm/gs.php?needle=" + $("#subcat_search").val();

            $.ajax({
                url: link1,
                // ajax function is called sending the input string to "gs.php".
                success: function(result){
                    // result is stuffed in the label.
                    $("#search_val").html(result);
                }
            });
        })   

    });
</script>
</head>

<body>

<!-- the input field for search string -->
<input type="text" id="subcat_search">
<br>
<!-- the output field for stuffing the output. -->
<label id="search_val"></label>

</body>
</html>

अब हम एक इंजन शामिल करेंगे, एक फ़ाइल बनाएंगे, इसे अपनी पसंद के अनुसार कॉल कर सकते हैं। मेरे मामले में यह gs.php है।

$head = "https://maps.googleapis.com/maps/api/place/textsearch/json?query="; //our head
$key = "your key here"; //your key
$hay = $_GET['needle'];

$hay = str_replace(" ", "+", $hay); //replacing the " " with "+" to design it as per the google's requirement 
$kill = $head . $hay . "&key=" . $key; //assembling the string in proper way . 
print file_get_contents($kill);

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

निश्चित रूप से उन चीजों का कोई अंत नहीं है जो हम कर सकते हैं, जैसे डेटा को टेबल पर रखना, डेटाबेस को भेजना आदि।


कृपया एक ही उत्तर को एक से अधिक बार पोस्ट न करें। और कृपया सुनिश्चित करें कि आपका उत्तर वास्तव में प्रश्न का उत्तर देता है। यदि आपको अधिक जानकारी के लिए किसी अन्य व्यक्ति को निर्देशित करने की आवश्यकता है, तो यह एक अच्छा जवाब नहीं है।
एलिक्जेनाइड

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