apache प्रीफ़ाल्ट अनुरोध एपाचे(सीओआरएस) द्वारा नियंत्रित नहीं किया जा रहा है



http cors (1)

दो मुख्य चीजें जिन्हें आप बदलना / जोड़ना चाहते हैं:

  • केवल Header set बजाय Header always set करें
  • उन शीर्षलेखों के साथ 200 OK ओएस वापस भेजने के द्वारा OPTIONS प्रबंधित करने के लिए mod_rewrite का उपयोग करें

इसलिए काम करने के लिए अनुरोध करने में अनुरोध को सक्षम करने के लिए, यहां एक न्यूनतम (आईआईएच) कॉन्फ़िगरेशन स्निपेट है:

Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Headers "Authorization"
Header always set Access-Control-Allow-Methods "GET, OPTIONS"
Header always set Access-Control-Expose-Headers "Content-Security-Policy, Location"
Header always set Access-Control-Max-Age "600"

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

Https://benjaminhorn.io/code/setting-cors-cross-origin-resource-sharing-on-apache-with-correct-response-headers-allowing-everything-through/ पर लंबे समय तक विवरण

विभिन्न Access-Control- रिस्पॉन्स हेडर के लिए सेट किए जाने वाले मूल्यों के बारे में कुछ सामान्य नोट्स:

  • Access-Control-Allow-Headers : आपको इसे किसी भी हेडर नाम को शामिल करना होगा जिसे आपके अनुरोध को सीओआरएस-सेफेलिस्टेड हेडर नाम या तथाकथित "वर्जित" हेडर नामों को छोड़कर भेजा जाता है (ब्राउज़र द्वारा सेट किए गए हेडरों के नाम जिन्हें आप सेट नहीं कर सकते हैं आपकी जावास्क्रिप्ट); युक्ति वैकल्पिक रूप से * वाइल्डकार्ड को इसकी वैल्यू के रूप में अनुमति देता है - ताकि आप इसे किसी दिन कोशिश कर सकें, लेकिन कोई ब्राउज़र अभी तक इसका समर्थन नहीं करता: क्रोम बग , फ़ायरफ़ॉक्स बग , सफारी बग

  • Access-Control-Allow-Methods : स्पेक वैकल्पिक रूप से * वाइल्डकार्ड की अनुमति देता है लेकिन फिर से Access-Control-Allow-Headers: * , कोई ब्राउज़र अभी तक इसका समर्थन नहीं करता है

  • Access-Control-Expose-Headers : आपको अपने रिश्तेदार हेडर्स को शामिल करने के लिए सेट करना होगा, जो आपके क्लाइंट कोड को Cache-Control , Content-Language , Content-Type , Expires , Pragma Last-Modified Pragma और Pragma से परे पढ़ने की जरुरत है - जो डिफ़ॉल्ट रूप से सामने आए हैं (ए बहुत सारे लोग इसे सेट करना भूल जाते हैं और वे एक विशेष प्रतिक्रिया शीर्षक के मूल्य को क्यों नहीं पढ़ सकते हैं इसके बारे में चकित हो जाते हैं); फिर फिर से कल्पना यहां * वाइल्डकार्ड की अनुमति देता है, लेकिन कोई ब्राउज़र अभी तक इसका समर्थन नहीं करता है

  • Access-Control-Max-Age : क्रोम में 600 (10 मिनट) हार्डिकोड की ऊपरी सीमा है, इसलिए इसके लिए इसके लिए एक उच्च मूल्य सेट करने का कोई मतलब नहीं है (फ़ायरफ़ॉक्स इसका सम्मान कर सकता है, लेकिन क्रोम इसे 10 मिनट तक कम कर देगा अगर आप इसे उच्च सेट करते हैं, और सफारी इसे केवल 5 मिनट तक सीमित करता है)

तो फिर, सवाल में दिखाए गए विशेष अनुरोध के बारे में, यहां कुछ विशिष्ट नोट दिए गए हैं:

  • आपके अनुरोध में Access-Control-Request-Headers:authorization एपाचें कॉन्फ़िग में Authorization , Access-Control-Allow-Headers रिस्पॉन्स हेडर में Authorization भी जोड़ें।

  • Origin ब्राउज़र द्वारा निर्धारित "प्रतिबंधित" हेडर नाम है, और Accept एक CORS-safelisted हेडर नाम है, इसलिए आपको उन्हें Access-Control-Allow-Headers में शामिल करने की आवश्यकता नहीं है

  • आपका अनुरोध कोई Content-Type नहीं भेजता है, इसलिए प्रतिक्रिया में Access-Control-Allow-Headers में इसकी आवश्यकता नहीं है (और कभी भी GET अनुरोधों के लिए आवश्यक नहीं है और अन्यथा केवल तभी आवश्यक होता है जब प्रकार application/x-www-form-urlencoded , text/plain , या multipart/form-data )

  • Access-Control-Allow-Methods , आपका अनुरोध सिर्फ एक GET लगता है, जब तक कि आप POST / PUT / DELETE / PATCH अनुरोध भी करने की योजना न GET , उनको स्पष्ट रूप से शामिल न करें

सामान्य:

Request URL:x/site.php
Request Method:OPTIONS
Status Code:302 Found
Remote Address:x.x.x.x:80

रिस्पांस हेडर:

view source
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Origin:*
Access-Control-Max-Age:300
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Length:0
Content-Type:text/html; charset=UTF-8
Date:Thu, 02 Mar 2017 14:27:21 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Location:y
Pragma:no-cache
Server:Apache/2.4.25 (Ubuntu)

अनुरोध हैडर:

view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:authorization
Access-Control-Request-Method:POST
Cache-Control:no-cache
Connection:keep-alive
DNT:1
Host:x
Origin:http://127.0.0.1:3000
Pragma:no-cache
Referer:http://127.0.0.1:3000/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.90 Safari/537.36

अपाचे वर्चुअलहोस्ट कॉन्फ़िग ऐसा दिखता है:

    <IfModule mod_headers.c>
           Header set Access-Control-Allow-Origin "http://127.0.0.1:3000"
           Header set Access-Control-Allow-Origin "http://127.0.0.1"
           Header set Access-Control-Max-Age "300"
           Header set Access-Control-Allow-Credentials "true"
           Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
           Header set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, PATCH, OPTIONS"
    </IfModule>

प्रीफलाइट अनुरोध अपाचे कॉन्फ़िग को छोड़ रहा है और सीधे मेरे वेबएप को मार रहा है, जो एक रीडायरेक्ट करता है (इसलिए 302 और स्थान: y)।

मुझे नहीं पता कि प्रीफ़ाल्ट अनुरोध एपाचे द्वारा क्यों संभाला नहीं जा रहा है?





preflight