2012-10-30 10 views
85

मुझे क्रोम का उपयोग कर सही तरीके से काम करने के लिए क्रॉस डोमेन कॉर्स अनुरोध प्राप्त करने में समस्या हो रही है।कॉर्स एक्सेस-कंट्रोल-अनुमति-हेडर वाइल्डकार्ड को अनदेखा किया जा रहा है?

अनुरोध हेडर:

Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:origin, content-type 
Access-Control-Request-Method:POST 
Connection:keep-alive 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4 

प्रतिक्रिया हेडर:

Access-Control-Allow-Headers:* 
Access-Control-Allow-Origin:* 
Allow:GET, POST, OPTIONS 
Content-Length:0 
Date:Tue, 30 Oct 2012 20:04:28 GMT 
Server:BaseHTTP/0.3 Python/2.7.3 

त्रुटि:

XMLHttpRequest cannot load domain. Request header field Content-Type is not allowed by Access-Control-Allow-Headers. 

और विकल्पों अनुरोध पेश अजगर कोड है:

self.send_response(200) 
self.send_header('Allow', 'GET, POST, OPTIONS') 
self.send_header('Access-Control-Allow-Origin', '*') 
self.send_header('Access-Control-Allow-Headers', '*') 
self.send_header('Content-Length', '0') 
self.end_headers() 

ऐसा लगता है कि एक्सेस-कंट्रोल-अनुमति-उत्पत्ति वाइल्डकार्ड को अनदेखा किया जा रहा है?

उत्तर

155

Access-Control-Allow-Headers हेडर में वाइल्डकार्ड के लिए समर्थन मई 2016 में केवल added to the living standard था, इसलिए यह सभी ब्राउज़रों द्वारा समर्थित नहीं हो सकता है। https://www.w3.org/TR/2014/REC-cors-20140116/#access-control-allow-headers-response-header

आप हेडर की एक बड़ी संख्या की उम्मीद हैं, तो आप Access-Control-Request-Headers हैडर के मूल्य में पढ़ सकते हैं और है कि मूल्य वापस गूंज Access-Control-Allow-Headers शीर्षक में कर सकते हैं: ब्राउज़र जो यह अभी तक लागू नहीं करते, यह एक सटीक मिलान होना चाहिए ।

+46

resp.setHeader ("पहुंच-नियंत्रण-अनुमति दें-हेडर", req.getHeader ("पहुंच-नियंत्रण-पुन से लिया खोज-हेडर ")); // किसी भी शीर्षलेख –

+2

रूबी पर, "अगर request.headers ['एक्सेस-कंट्रोल-अनुरोध-हेडर'] तो \t शीर्षलेख ['एक्सेस-कंट्रोल-स्वीकृति-हेडर'] = request.headers ['एक्सेस-कंट्रोल- अनुरोध-शीर्षलेख '] \t अंत "मेरे लिए ठीक दिखता है। –

+0

यह आपकी मदद कर सकता है * (यह एक्सेस-कंट्रोल-एक्सपोज़र-हेडर के लिए अपाचे। एचटीएसीएसी का एक सेट दिखाता है लेकिन आप इसे एक्सेस-कंट्रोल-ऑर्डर-हेडर के लिए सेट करने के लिए कॉपी और पेस्ट कर सकते हैं) *: [दाएं ... तो, एक्सेस- नियंत्रण-एक्सपोज़-हेडर वाइल्डकार्ड का समर्थन नहीं करता है ... - iCompile ब्लॉग] (http: //icompile.eladkarako।com/right-so-access-control-expose-headers-does-not-support-wildcard /) –

13

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

निम्नलिखित PHP कोड मेरे लिए काम करता

// Allow CORS 
if (isset($_SERVER['HTTP_ORIGIN'])) { 
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); 
    header('Access-Control-Allow-Credentials: true');  
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); 
} 
// Access-Control headers are received during OPTIONS requests 
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 
    header("Access-Control-Allow-Headers: *"); 
} 

मैं कुछ भ्रामक प्रतिक्रिया के साथ इसी तरह के सवाल पाया:

  • सर्वर थ्रेड का कहना है कि यह क्रोम का 2 साल का बग है: एक्सेस-कंट्रोल-स्वीट-हेडर स्थानीयहोस्ट से मेल नहीं खाते हैं। यह गलत है: मैं सामान्य रूप से पोस्ट के साथ अपने स्थानीय सर्वर पर सीओआरएस का उपयोग कर सकता हूं
  • एक्सेस-कंट्रोल-अनुमति-हेडर वाइल्डकार्ड स्वीकार करता है। यह भी गलत है, वाइल्डकार्ड मेरे लिए काम करता है (मैंने केवल क्रोम के साथ परीक्षण किया)

इस मुद्दे को समझने में मुझे आधा दिन लगता है।

खुश कोडन

+2

वाइल्डकार्ड ("एक्सेस-कंट्रोल-स्वीट-हेडर: *") सफारी 7.0.4 पर मेरे लिए काम नहीं किया। –

+0

मैंने पाया कि सेटिंग-नियंत्रण-अनुमति-शीर्षलेख क्रोम संस्करण 40.0.2214.111 मीटर में POST के लिए काम करता है। –

+3

यह सही प्रतीत नहीं होता ..... spec 'विकल्प 'के लिए' एक्सेस-कंट्रोल-स्वीकृति-हेडर 'पर' * 'की अनुमति नहीं देता है। – Pacerier

2

monsur से उद्धरित,

The Access-Control-Allow-Headers header does not allow wildcards. It must be an exact match: http://www.w3.org/TR/cors/#access-control-allow-headers-response-header .

तो यहाँ मेरी php समाधान है।

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 
    $headers=getallheaders(); 
    @$ACRH=$headers["Access-Control-Request-Headers"]; 
    header("Access-Control-Allow-Headers: $ACRH"); 
} 
+1

असल में, क्यों नहीं 'हेडर (' एक्सेस-कंट्रोल-स्वीकृति-हेडर: '। $ _SERVER [' HTTP_ACCESS_CONTROL_ALLOW_HEADERS ']); ' – Pacerier

25
उन CORS हेडर * मूल्य के रूप में समर्थन नहीं करते

, एक ही रास्ता इस के साथ * को बदलने के लिए है:

Accept, Accept-CH, Accept-Charset, Accept-Datetime, Accept-Encoding, Accept-Ext, Accept-Features, Accept-Language, Accept-Params, Accept-Ranges, Access-Control-Allow-Credentials, Access-Control-Allow-Headers, Access-Control-Allow-Methods, Access-Control-Allow-Origin, Access-Control-Expose-Headers, Access-Control-Max-Age, Access-Control-Request-Headers, Access-Control-Request-Method, Age, Allow, Alternates, Authentication-Info, Authorization, C-Ext, C-Man, C-Opt, C-PEP, C-PEP-Info, CONNECT, Cache-Control, Compliance, Connection, Content-Base, Content-Disposition, Content-Encoding, Content-ID, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Script-Type, Content-Security-Policy, Content-Style-Type, Content-Transfer-Encoding, Content-Type, Content-Version, Cookie, Cost, DAV, DELETE, DNT, DPR, Date, Default-Style, Delta-Base, Depth, Derived-From, Destination, Differential-ID, Digest, ETag, Expect, Expires, Ext, From, GET, GetProfile, HEAD, HTTP-date, Host, IM, If, If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Keep-Alive, Label, Last-Event-ID, Last-Modified, Link, Location, Lock-Token, MIME-Version, Man, Max-Forwards, Media-Range, Message-ID, Meter, Negotiate, Non-Compliance, OPTION, OPTIONS, OWS, Opt, Optional, Ordering-Type, Origin, Overwrite, P3P, PEP, PICS-Label, POST, PUT, Pep-Info, Permanent, Position, Pragma, ProfileObject, Protocol, Protocol-Query, Protocol-Request, Proxy-Authenticate, Proxy-Authentication-Info, Proxy-Authorization, Proxy-Features, Proxy-Instruction, Public, RWS, Range, Referer, Refresh, Resolution-Hint, Resolver-Location, Retry-After, Safe, Sec-Websocket-Extensions, Sec-Websocket-Key, Sec-Websocket-Origin, Sec-Websocket-Protocol, Sec-Websocket-Version, Security-Scheme, Server, Set-Cookie, Set-Cookie2, SetProfile, SoapAction, Status, Status-URI, Strict-Transport-Security, SubOK, Subst, Surrogate-Capability, Surrogate-Control, TCN, TE, TRACE, Timeout, Title, Trailer, Transfer-Encoding, UA-Color, UA-Media, UA-Pixels, UA-Resolution, UA-Windowpixels, URI, Upgrade, User-Agent, Variant-Vary, Vary, Version, Via, Viewport-Width, WWW-Authenticate, Want-Digest, Warning, Width, X-Content-Duration, X-Content-Security-Policy, X-Content-Type-Options, X-CustomHeader, X-DNSPrefetch-Control, X-Forwarded-For, X-Forwarded-Port, X-Forwarded-Proto, X-Frame-Options, X-Modified, X-OTHER, X-PING, X-PINGOTHER, X-Powered-By, X-Requested-With


.htaccess उदाहरण (CORS शामिल):

<IfModule mod_headers.c> 
    Header unset Connection 
    Header unset Time-Zone 
    Header unset Keep-Alive 
    Header unset Access-Control-Allow-Origin 
    Header unset Access-Control-Allow-Headers 
    Header unset Access-Control-Expose-Headers 
    Header unset Access-Control-Allow-Methods 
    Header unset Access-Control-Allow-Credentials 

    Header set Connection       keep-alive 
    Header set Time-Zone       "Asia/Jerusalem" 
    Header set Keep-Alive       timeout=100,max=500 
    Header set Access-Control-Allow-Origin  "*" 
    Header set Access-Control-Allow-Headers  "Accept, Accept-CH, Accept-Charset, Accept-Datetime, Accept-Encoding, Accept-Ext, Accept-Features, Accept-Language, Accept-Params, Accept-Ranges, Access-Control-Allow-Credentials, Access-Control-Allow-Headers, Access-Control-Allow-Methods, Access-Control-Allow-Origin, Access-Control-Expose-Headers, Access-Control-Max-Age, Access-Control-Request-Headers, Access-Control-Request-Method, Age, Allow, Alternates, Authentication-Info, Authorization, C-Ext, C-Man, C-Opt, C-PEP, C-PEP-Info, CONNECT, Cache-Control, Compliance, Connection, Content-Base, Content-Disposition, Content-Encoding, Content-ID, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Script-Type, Content-Security-Policy, Content-Style-Type, Content-Transfer-Encoding, Content-Type, Content-Version, Cookie, Cost, DAV, DELETE, DNT, DPR, Date, Default-Style, Delta-Base, Depth, Derived-From, Destination, Differential-ID, Digest, ETag, Expect, Expires, Ext, From, GET, GetProfile, HEAD, HTTP-date, Host, IM, If, If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Keep-Alive, Label, Last-Event-ID, Last-Modified, Link, Location, Lock-Token, MIME-Version, Man, Max-Forwards, Media-Range, Message-ID, Meter, Negotiate, Non-Compliance, OPTION, OPTIONS, OWS, Opt, Optional, Ordering-Type, Origin, Overwrite, P3P, PEP, PICS-Label, POST, PUT, Pep-Info, Permanent, Position, Pragma, ProfileObject, Protocol, Protocol-Query, Protocol-Request, Proxy-Authenticate, Proxy-Authentication-Info, Proxy-Authorization, Proxy-Features, Proxy-Instruction, Public, RWS, Range, Referer, Refresh, Resolution-Hint, Resolver-Location, Retry-After, Safe, Sec-Websocket-Extensions, Sec-Websocket-Key, Sec-Websocket-Origin, Sec-Websocket-Protocol, Sec-Websocket-Version, Security-Scheme, Server, Set-Cookie, Set-Cookie2, SetProfile, SoapAction, Status, Status-URI, Strict-Transport-Security, SubOK, Subst, Surrogate-Capability, Surrogate-Control, TCN, TE, TRACE, Timeout, Title, Trailer, Transfer-Encoding, UA-Color, UA-Media, UA-Pixels, UA-Resolution, UA-Windowpixels, URI, Upgrade, User-Agent, Variant-Vary, Vary, Version, Via, Viewport-Width, WWW-Authenticate, Want-Digest, Warning, Width, X-Content-Duration, X-Content-Security-Policy, X-Content-Type-Options, X-CustomHeader, X-DNSPrefetch-Control, X-Forwarded-For, X-Forwarded-Port, X-Forwarded-Proto, X-Frame-Options, X-Modified, X-OTHER, X-PING, X-PINGOTHER, X-Powered-By, X-Requested-With" 
    Header set Access-Control-Expose-Headers  "Accept, Accept-CH, Accept-Charset, Accept-Datetime, Accept-Encoding, Accept-Ext, Accept-Features, Accept-Language, Accept-Params, Accept-Ranges, Access-Control-Allow-Credentials, Access-Control-Allow-Headers, Access-Control-Allow-Methods, Access-Control-Allow-Origin, Access-Control-Expose-Headers, Access-Control-Max-Age, Access-Control-Request-Headers, Access-Control-Request-Method, Age, Allow, Alternates, Authentication-Info, Authorization, C-Ext, C-Man, C-Opt, C-PEP, C-PEP-Info, CONNECT, Cache-Control, Compliance, Connection, Content-Base, Content-Disposition, Content-Encoding, Content-ID, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Script-Type, Content-Security-Policy, Content-Style-Type, Content-Transfer-Encoding, Content-Type, Content-Version, Cookie, Cost, DAV, DELETE, DNT, DPR, Date, Default-Style, Delta-Base, Depth, Derived-From, Destination, Differential-ID, Digest, ETag, Expect, Expires, Ext, From, GET, GetProfile, HEAD, HTTP-date, Host, IM, If, If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Keep-Alive, Label, Last-Event-ID, Last-Modified, Link, Location, Lock-Token, MIME-Version, Man, Max-Forwards, Media-Range, Message-ID, Meter, Negotiate, Non-Compliance, OPTION, OPTIONS, OWS, Opt, Optional, Ordering-Type, Origin, Overwrite, P3P, PEP, PICS-Label, POST, PUT, Pep-Info, Permanent, Position, Pragma, ProfileObject, Protocol, Protocol-Query, Protocol-Request, Proxy-Authenticate, Proxy-Authentication-Info, Proxy-Authorization, Proxy-Features, Proxy-Instruction, Public, RWS, Range, Referer, Refresh, Resolution-Hint, Resolver-Location, Retry-After, Safe, Sec-Websocket-Extensions, Sec-Websocket-Key, Sec-Websocket-Origin, Sec-Websocket-Protocol, Sec-Websocket-Version, Security-Scheme, Server, Set-Cookie, Set-Cookie2, SetProfile, SoapAction, Status, Status-URI, Strict-Transport-Security, SubOK, Subst, Surrogate-Capability, Surrogate-Control, TCN, TE, TRACE, Timeout, Title, Trailer, Transfer-Encoding, UA-Color, UA-Media, UA-Pixels, UA-Resolution, UA-Windowpixels, URI, Upgrade, User-Agent, Variant-Vary, Vary, Version, Via, Viewport-Width, WWW-Authenticate, Want-Digest, Warning, Width, X-Content-Duration, X-Content-Security-Policy, X-Content-Type-Options, X-CustomHeader, X-DNSPrefetch-Control, X-Forwarded-For, X-Forwarded-Port, X-Forwarded-Proto, X-Frame-Options, X-Modified, X-OTHER, X-PING, X-PINGOTHER, X-Powered-By, X-Requested-With" 
    Header set Access-Control-Allow-Methods  "CONNECT, DEBUG, DELETE, DONE, GET, HEAD, HTTP, HTTP/0.9, HTTP/1.0, HTTP/1.1, HTTP/2, OPTIONS, ORIGIN, ORIGINS, PATCH, POST, PUT, QUIC, REST, SESSION, SHOULD, SPDY, TRACE, TRACK" 
    Header set Access-Control-Allow-Credentials "true" 

    Header set DNT "0" 
    Header set Accept-Ranges "bytes" 
    Header set Vary "Accept-Encoding" 
    Header set X-UA-Compatible "IE=edge,chrome=1" 
    Header set X-Frame-Options "SAMEORIGIN" 
    Header set X-Content-Type-Options "nosniff" 
    Header set X-Xss-Protection "1; mode=block" 
</IfModule> 

F.A.Q:

  • क्यों Access-Control-Allow-Headers, Access-Control-Expose-Headers, Access-Control-Allow-Methods मूल्यों सुपर लंबे होते हैं?

    उन * वाक्य रचना का समर्थन नहीं करते, इसलिए मैं वेब से सबसे आम (और विदेशी) हेडर एकत्र किया है विभिन्न प्रारूपों में, #1#2#3 (और मैं समय-समय पर सूची अद्यतन करेगा)

  • आप Header unset ______ वाक्यविन्यास का उपयोग क्यों करते हैं?

    गोडाडी सर्वर (जो मेरी वेबसाइट पर होस्ट किया गया है ..) में एक अजीब बग है जहां हेडर पहले से सेट हैं, पिछला मान मौजूदा में शामिल होगा .. (इसे बदलने के बजाय) मैं "प्री- स्वच्छ "मौजूदा मूल्यों (वास्तव में सिर्फ आ त्वरित & & गंदा समाधान)

  • यह सुरक्षित है मुझे इस्तेमाल करने के लिए 'के रूप में-है'?

    खैर .. ज्यादातर जवाब होगा हाँ.htaccess के बाद से लिपियों के लिए हेडर सीमित कर रहा है (पीएचपी, एचटीएमएल, ...) और संसाधनों (.JPG, .js, .css) निम्नलिखित से परोसा "फ़ोल्डर" -location। आप वैकल्पिक रूप से Access-Control-Allow-Methods लाइनों को हटाना चाहते हैं। इसके अलावा Connection, Time-Zone, Keep-Alive और DNT, Accept-Ranges, Vary, X-UA-Compatible, X-Frame-Options, X-Content-Type-Options और X-Xss-Protection .. स्वतंत्र महसूस उन भी दूर करने के लिए ... बस एक सुझाव मैं अपने ऑनलाइन सेवा के लिए उपयोग कर रहा हूँ रहे हैं

मेरी comment above

संबंधित मुद्दे