সিওআরএস অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-শিরোলেখের ওয়াইল্ডকার্ড উপেক্ষা করা হচ্ছে?


118

ক্রোম ব্যবহার করে সঠিকভাবে কাজ করার জন্য ক্রস ডোমেনের CORS অনুরোধ পেতে আমার সমস্যা হচ্ছে।

অনুরোধ শিরোনাম:

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()

মনে Access-Control-Allow-Originহচ্ছে ওয়াইল্ডকার্ড উপেক্ষা করা হচ্ছে?

উত্তর:


185

Access-Control-Allow-Headersশিরোনামে ওয়াইল্ডকার্ডগুলির জন্য সমর্থন কেবল মে ২০১ 2016 সালে জীবনযাত্রার মানতে যুক্ত হয়েছিল , তাই এটি সমস্ত ব্রাউজার দ্বারা সমর্থিত নাও হতে পারে। ব্রাউজারে যা এটি এখনও কার্যকর করে না, এটি অবশ্যই একটি সঠিক মিল হতে হবে: https://www.w3.org/TR/2014/REC-cors-20140116/#access-control-allow-headers-response-header

যদি আপনি বিপুল সংখ্যক শিরোলেখের প্রত্যাশা করেন তবে আপনি Access-Control-Request-Headersশিরোনামের মানটি পড়তে পারেন এবং শিরোনামে সেই মানটি প্রতিধ্বনি করতে পারেন Access-Control-Allow-Headers


55
resp.setHeader ("অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-শিরোনামগুলি", req.getHeader ("অ্যাক্সেস-নিয়ন্ত্রণ-অনুরোধ-শিরোনাম")); // যে কোনও শিরোনামকে অনুমতি দিন
স্যাম বার্নুম

3
রুবিতে, "যদি রিকোয়েস্ট। হেডারস ['অ্যাক্সেস-কন্ট্রোল-রিকোয়েস্ট-শিরোনাম'] তারপরে শিরোনামগুলি ['অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-শিরোনামগুলি অনুমতি দিন'] = অনুরোধ.হেডারস ['অ্যাক্সেস-কন্ট্রোল-রিকোয়েস্ট-শিরোনাম'] শেষ" দেখায় আমার জন্য ঠিক আছে.
সুনিও ইয়োশিওকা

1
@ মুনসুর: এই উত্তরে উল্লেখ করা হয়েছে যে কমপক্ষে তত্ত্ব অনুসারে এখন ওয়াইল্ডকার্ডের অনুমতি রয়েছে, তাই আমি এটিকে প্রতিফলিত করতে আপনার উত্তর আপডেট করেছি। আপনি যদি আমার শৈলী পছন্দ না করেন তবে আপনার স্বাদে নির্দ্বিধায় এডিট করুন।
এমভিজি

2
সতর্কতার একটি শব্দ, আপনি যদি ব্রাউজারটিকে প্রিফলাইট প্রতিক্রিয়া (অ্যাক্সেস-কন্ট্রোল-ম্যাক্স-এজ সহ) ক্যাশে করার অনুমতি দেন তবে আপনি অ্যাক্সেস-কন্ট্রোল-রিকোয়েস্ট-শিরোনামের মানটি ফিরিয়ে দেওয়ার উপর নির্ভর করে সমস্যার মধ্যে পড়তে পারেন। আপনি জানেন না যে প্রথম অনুরোধটি টানা অনুরোধের সমস্ত শিরোনামকে তালিকাবদ্ধ করে।
সাইমন এজিজিং

2
@ মোমোক্রোম দুর্দান্ত হবে যদি আপনি আমাদের জানাতে পারেন যে এটি কীভাবে উত্পাদনের সুরক্ষা উদ্বেগ হতে পারে ..
সুন্দরভয়ে

52

এই 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 উদাহরণ (সিওআরএস অন্তর্ভুক্ত):

<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>

প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী:

  • কেন Access-Control-Allow-Headers, Access-Control-Expose-Headers, Access-Control-Allow-Methodsমান সুপার দীর্ঘ?

    এগুলি *সিনট্যাক্স সমর্থন করে না , তাই আমি বিভিন্ন ফর্ম্যাট # 1 # 2 # 3 এ ওয়েবের চারপাশ থেকে সর্বাধিক সাধারণ (এবং বহিরাগত) শিরোনাম সংগ্রহ করেছি (এবং আমি তালিকাটি সময়ে সময়ে আপডেট করব)

  • আপনি Header unset ______সিনট্যাক্স ব্যবহার করেন কেন ?

    GoDaddy সার্ভারগুলিতে (যা আমার ওয়েবসাইটটি হোস্ট করা আছে ..) একটি অদ্ভুত বাগ রয়েছে যেখানে শিরোনামগুলি ইতিমধ্যে সেট করা থাকলে পূর্ববর্তী মান বিদ্যমানটির সাথে যোগ দেবে .. (এটি পরিবর্তনের পরিবর্তে) এইভাবে আমি বিদ্যমান মানগুলি "প্রাক-পরিষ্কার" করব (সত্যিই কেবল এএই দ্রুত এবং& মলিন সমাধান)

  • 'As-is' ব্যবহার করা কি আমার পক্ষে নিরাপদ?

    ওয়েল .. বেশিরভাগ উত্তর হ্যাঁ হ্যাঁ যেহেতু .htaccessশিরোনামগুলি স্ক্রিপ্টগুলিতে (পিএইচপি, এইচটিএমএল, ...) এবং সংস্থানসমূহ (.জেপিজি, .জেএস, .সিএসএস) এর জন্য নিম্নলিখিত "ফোল্ডার" -লোকেশন থেকে সীমাবদ্ধ করে চলেছে। আপনি allyচ্ছিকভাবে 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শুধু একটি প্রস্তাবনা আমার অনলাইন-সেবার জন্য ব্যবহার করছি হয় .. সেই খুব অপসারণ করতে দ্বিধা বোধ করবেন ...

উপরে আমার মন্তব্য থেকে নেওয়া


এটি অবশ্যই আমার জীবন বাঁচিয়েছিল। আমি সিডিএন সরবরাহকারী, সিওআরএস সক্ষম Access-Control-Allow-Origin "*"হওয়া ব্যবহার করছিলাম এবং আমি এটি ব্যবহার না করা পর্যন্ত কিছুই আমার ওয়েবসাইটের সাথে এটির অনুমতি দিচ্ছিলাম । এমনকি সিডিএন সরবরাহকারীরও আমাদের পক্ষে কোনও উত্তর ছিল না। আমি সাইটগ্রাউন্ডে ওয়েবসাইটটি চালাচ্ছি , সম্ভবত, GoDaddy হিসাবে , প্রথমে সমস্ত কিছু আনসেট করা বাধ্যতামূলক।
ইগনাসিও বুস্টোস

দুর্দান্ত পোস্ট, এটি এই পৃষ্ঠার শীর্ষে ধাক্কা দেওয়া উচিত।
জ্ঞান

1
আমার নির্দিষ্ট ক্ষেত্রে, আমাকে Access-Control-Allow-Methodsএই সমস্ত পদ্ধতি থেকে অপসারণ করতে হয়েছিল : HTTP / 0.9, HTTP / 1.0, HTTP / 1.1, HTTP / 2
umbe1987

এইচটিটিপি / 2 এমনকি একটি বৈধ 'পদ্ধতি'? এইচটিটিপি / ১.১ থেকে ২ কে আপগ্রেড করা কি এরকম বা অন্য কিছুর মতো কাজ করে? আমি যদি এখানে দেখি: sookocheff.com/post/networking/how-does-http-2- এইচটিটিপি / ... অংশটি তৃতীয় স্থান হিসাবে যেতে হবে, প্রথম নয়, যেখানে পদ্ধতিটি রাখা হয়েছে।
হেন্ক পোলি

হয়তো এইচটিটিপি / ২.০ সমর্থন করার জন্য আপনাকে 'পিআরআই' পদ্ধতি যুক্ত করতে হবে?
হেন্ক পোলি

17

আমি দেখতে পেয়েছি যে Access-Control-Allow-Headers: *বিকল্পগুলির অনুরোধের জন্য কেবল সেট করা উচিত। আপনি যদি এটি পোস্টের অনুরোধের জন্য ফেরত দেন তবে ব্রাউজারটি অনুরোধটি বাতিল করুন (কমপক্ষে ক্রোমের জন্য)

নিম্নলিখিত পিএইচপি কোড আমার জন্য কাজ করে

// 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 বছরের বাগের ক্রোম: Access-Control-Allow-Headersলোকালহোস্টের সাথে মেলে না। এটি ভুল: আমি পোস্ট সহ স্থানীয় সার্ভারে সিওআরএস ব্যবহার করতে পারি
  • Access-Control-Allow-Headersওয়াইল্ডকার্ড গ্রহণ করে। এটিও ভুল, ওয়াইল্ডকার্ড আমার পক্ষে কাজ করে (আমি কেবল ক্রোম দিয়ে পরীক্ষা করেছি)

সমস্যাটি বের করতে আমার অর্ধেক দিন সময় লাগবে।

শুভ কোডিং


2
ওয়াইল্ডকার্ড ("অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-শিরোনামগুলি: *") সাফারি .0.০.৪ এ আমার পক্ষে কাজ করে নি।
সুনিও ইয়োশিওকা

আমি দেখতে পেলাম যে অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-শিরোনামগুলি Chrome পোস্টে 40.0.2214.111 মিটার পোস্টের জন্য কাজ করে।
ডেরেক গ্রেয়ার

3
এই বলে মনে হচ্ছে না ডান ..... বৈশিষ্ট অনুমতি দেয় না *উপর Access-Control-Allow-Headersএমনকি OPTIONS
পেসারিয়ার

1

মনসুর থেকে উদ্ধৃত,

অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-শিরোনাম শিরোনাম ওয়াইল্ডকার্ডের অনুমতি দেয় না। এটি অবশ্যই একটি নির্ভুল ম্যাচ হতে হবে: http://www.w3.org/TR/cors/#access-control-allow-headers-response-header

সুতরাং এখানে আমার পিএইচপি সমাধান।

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

1
আসলে, কেন সহজভাবে নয়header('Access-Control-Allow-Headers: ' . $_SERVER['HTTP_ACCESS_CONTROL_ALLOW_HEADERS']);
পেসারিয়ার

0

এখানে এনগিনেক্সের জন্য জ্বলন রয়েছে a

location / {
    # Simple requests
    if ($request_method ~* "(GET|POST)") {
      add_header "Access-Control-Allow-Origin"  *;
    }

    # Preflighted requests
    if ($request_method = OPTIONS ) {
      add_header "Access-Control-Allow-Origin"  *;
      add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
      add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
    }

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.