HTTP विकल्प अनुरोध पर अपाचे में "200 ठीक" लौटना


12

मैं किसी भी कोड को छूने के बिना क्रॉस-डोमेन HTTP एक्सेस कंट्रोल को लागू करने का प्रयास कर रहा हूं ।

मुझे मेरा अपाचे (2) सर्वर इस ब्लॉक के साथ सही एक्सेस कंट्रोल हेडर लौटा रहा है:

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

अब मुझे अपाचे को अपने कोड को निष्पादित करने से रोकने की आवश्यकता है जब ब्राउज़र एक HTTP OPTIONSअनुरोध भेजता है (यह REQUEST_METHODपर्यावरण चर में संग्रहीत है ), लौट रहा है 200 OK

अनुरोध विधि के विकल्प होने पर मैं "200 ठीक" का जवाब देने के लिए अपाचे को कैसे कॉन्फ़िगर कर सकता हूं?

मैंने इस mod_rewriteब्लॉक की कोशिश की है , लेकिन एक्सेस कंट्रोल हेडर खो गए हैं।

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

जवाबों:


12

आप एक गैर-सफलता (गैर -2xx) प्रतिक्रिया के लिए एक हेडर जोड़ रहे हैं, जैसे कि रीडायरेक्ट, जिस स्थिति में हमेशा अंतिम प्रतिक्रिया में हमेशा उपयोग की जाने वाली तालिका का उपयोग किया जाता है।

सही "हैडर सेट":

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

7

यदि आप प्रमाणीकृत एक्सेस के लिए एक निर्देशिका सेट करते हैं, तो क्रोम और सफारी (शायद अन्य भी) जैसे ब्राउज़र हमेशा XmlHttpRequest कॉल से पहले एक बिना लाइसेंस वाले विकल्प का अनुरोध भेजते हैं, जो हमेशा 401 हो जाता है और अगर हम .htccess फ़ाइल / Apache कॉन्फ़िगरेशन सेट नहीं करते हैं तो विफल हो जाता है। प्रमाणीकरण की आवश्यकता के बिना विकल्प विधि की अनुमति देने के लिए। यह मुझे 2 दिनों के लिए पागल कर देता है और यह "गूढ़" जानकारी की तरह है जिसे वेबमास्टर्स गुप्त रखते हैं, मुझे लगता है! वैसे भी मैंने अपने .htaccess को इस तरह कॉन्फ़िगर किया है और अब यह काम करता है:

AuthUserFile <path to password file>
AuthName "Thou shalt not pass!"
AuthType Basic
Options -Indexes
<LimitExcept OPTIONS>
  Require valid-user
</LimitExcept>

फिर आपको PHP स्क्रिप्ट पर हेडर ठीक से सेट करना होगा।


1
वह अंतिम पंक्ति महत्वपूर्ण है। यदि अंतर्निहित वेब सेवा OPTIONSअनुरोध को संभाल नहीं सकती है , तो आपको 404 त्रुटि प्राप्त होगी।
user2297366

7

कभी कभी इस approuch मदद कर सकते हैं:

<IfModule mod_headers.c>
    Header add Access-Control-Allow-Origin "*"
    Header add Access-Control-Allow-Headers "origin, content-type"
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
</IfModule>

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ blank.html [QSA,L]

यह उपयोगी है जब आपके पास अपाचे जैसा सर्वर होता है


इसने मेरे लिए अनुरोधों को खोल दिया। हैरानी की बात है। Apache 2.4 पर इस नियम के साथ blank.html पर मौजूद नहीं है!
नादिर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.