অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি একাধিক মূল ডোমেন?


1049

Access-Control-Allow-Originশিরোলেখ ব্যবহার করে একাধিক ক্রস-ডোমেনের অনুমতি দেওয়ার কোনও উপায় আছে কি ?

আমি সচেতন *, কিন্তু এটি খুব উন্মুক্ত। আমি সত্যিকার অর্থে মাত্র দু'টি ডোমেনের অনুমতি দিতে চাই।

উদাহরণ হিসাবে, এরকম কিছু:

Access-Control-Allow-Origin: http://domain1.example, http://domain2.example

আমি উপরের কোডটি চেষ্টা করেছি তবে ফায়ারফক্সে কাজ করছে বলে মনে হচ্ছে না।

একাধিক ডোমেন নির্দিষ্ট করা সম্ভব নাকি আমি কেবল একটিতে আটকে আছি?



3
সর্বাধিক সাম্প্রতিক ফায়ারফক্স ব্যবহার করে, না কমা বিচ্ছিন্ন হয়েছে, না স্পেস বিচ্ছিন্ন ডোমেনগুলি কাজ করে না। ডোমেনের তালিকার সাথে মিলে যাওয়া এবং একক হোস্টকে শিরোনামে রাখাই এখনও সুরক্ষার চেয়ে ভাল এবং সঠিকভাবে কাজ করে।
ড্যানিয়েল ডাব্লু।

1
আপনি যদি এইচটিটিপিএসের জন্য লড়াই করে চলেছেন তবে আমি একটি সমাধান পেয়েছি ।
অ্যালেক্স ডব্লু

7
গুরুত্বপূর্ণ দ্রষ্টব্য : কেবলমাত্র শিরোনামে ডোমেন তৈরি করার অনুমতি দেওয়ারঅর্থAccess-Control-Allow-Originএই নয় যে অন্যান্য ডোমেনগুলি এই শেষ পয়েন্টে কোনও পদ্ধতি ট্রিগার করতে পারে না (যেমন, REST এপিআই পদ্ধতি)। এটির অর্থ হ'ল অনুমোদিত না হওয়া উত্স জাভাস্ক্রিপ্টে ফলাফল ব্যবহার করতে পারে না (ব্রাউজার এটি নিশ্চিত করে)। নির্দিষ্ট ডোমেনগুলির জন্য একটি এন্ডপয়েন্টে অ্যাক্সেস সীমাবদ্ধ করার জন্য একটি সার্ভার-সাইড অনুরোধ ফিল্টার ব্যবহার করুন উদাহরণস্বরূপ অনুমোদিত না হওয়া ডোমেনগুলির জন্য HTTP 401 প্রদান করে।
ক্লিউজ

1
আপনি Vary: Originএকাধিক ইউআরএল ব্যবহার করতে চাইলে আপনার সর্বদা শিরোনাম সংযোজন করা উচিত , দেখুন: fetch.spec.whatwg.org/#cors-protocol-and-http-cache
নুল

উত্তর:


861

এটি করার প্রস্তাবিত পদ্ধতির মতো মনে হচ্ছে আপনার সার্ভারটি ক্লায়েন্টের কাছ থেকে অরিজিন শিরোনামটি পড়তে পারে, তার সাথে আপনি যে ডোমেনগুলি মঞ্জুর করতে চান তার তালিকার সাথে এটি তুলনা করুন এবং যদি এটি মেলে তবে শিরোনামটির মান Originক্লায়েন্টের কাছে ফিরে আসে Access-Control-Allow-Originপ্রতিক্রিয়ায় হেডার।

সঙ্গে .htaccessআপনি এটা ভালো করতে পারেন:

# ----------------------------------------------------------------------
# Allow loading of external fonts
# ----------------------------------------------------------------------
<FilesMatch "\.(ttf|otf|eot|woff|woff2)$">
    <IfModule mod_headers.c>
        SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.example|dev02.otherdomain.example)$" AccessControlAllowOrigin=$0
        Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        Header merge Vary Origin
    </IfModule>
</FilesMatch>


153
এই উত্তরের সাথে আমার সমস্যাটি হ'ল এটি সত্যই আমাকে সহায়তা করে না, কারণ আমরা একটি সিডিএন ব্যবহার করি এবং স্পষ্টতই আমরা সিডিএন কীভাবে শিরোনামগুলি অগ্রগতিতে সেট করে তা নিয়ন্ত্রণ করতে পারি না।
বিটি

6
- নীচে আমার উত্তর প্রকৃত উদাহরণ (nginx) stackoverflow.com/a/12414239/6084
mjallday

71
ক্যাশে বা সিডিএন যদি উদ্বেগের বিষয় থাকে তবে ভিন্ন উত্সের অনুরোধ শিরোনামের মানগুলির জন্য পৃথক প্রতিক্রিয়া রাখতে ক্যাশে / সিডিএনকে বলতে ভেরি শিরোনাম ব্যবহার করুন use আপনি আপনার প্রতিক্রিয়াতে "ভার্য: উত্স" এর মতো শিরোনাম অন্তর্ভুক্ত করবেন। ক্যাশে / সিডিএন তখন জানে যে এটি শিরোনাম "উত্স: foo.example.com " সহ একটি অনুরোধের একটি প্রতিক্রিয়া এবং শিরোনাম "উত্স: বার.এক্সামেল.কম " এর সাথে অনুরোধের আলাদা প্রতিক্রিয়া পাঠানো উচিত
শান

10
@ স্যাটারডেপ্লেস, যদি আপনার অরিজিনাল শিরোনামে অ্যাক্সেস থাকে তবে আপনি সিওআরএস অতীত।
পল

222

আমি পিএইচপি-তে অন্য একটি সমাধান ব্যবহার করছি:

$http_origin = $_SERVER['HTTP_ORIGIN'];

if ($http_origin == "http://www.domain1.com" || $http_origin == "http://www.domain2.com" || $http_origin == "http://www.domain3.com")
{  
    header("Access-Control-Allow-Origin: $http_origin");
}

12
স্ট্যাকওভারফ্লো . com/ a/ 1850482/11635 এ প্রস্তাবিত পন্থাটি কেন ব্যবহার করবেন না [এবং কোনও ওয়াইল্ডকার্ড প্রেরণ করবেন না, কেবল অনুরোধ করা উত্স]? এটি আরও কিছু অর্জন না করে কেবল আরও অনুমতিপ্রাপ্ত?
রুবেন বারটেলিংক

15
থাকার header('Access-Control-Allow-Origin: *')মাঝে মাঝে বলে ওয়াইল্ড কার্ড ব্যবহার করতে পারবেন না যদি পরিচয়পত্র পতাকা সত্য - যখন ঘটবে header('Access-Control-Allow-Credentials: true')সম্ভবত। সুতরাং, ভাল মঞ্জুরি বংশোদ্ভূত করতে $http_originনিজেই শর্তসাপেক্ষে যদি
রাকিব

6
গত লাইন প্রতিস্থাপন header("Access-Control-Allow-Origin: " . $http_origin);এটি কাজ করা
ফ্রাসোয়া রোমাঁ

2
এই কোডটি ত্রুটিযুক্ত দেখা যায়, যদি কোনও HTTP_ORIGIN শিরোনাম স্বীকৃত না হয় তবে স্ক্রিপ্টটি প্রশস্ত রেখে খোলা রেখে কোনও অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স সেট করা যায় না।
স্টিফেন আর

9
@ স্টেফেনআর আসলে "প্রশস্ত বন্ধ" আরও সঠিক হবে, কারণ এর উদ্দেশ্য হ'ল স্ক্রিপ্টটি অন্য ডোমেনগুলিতে খোলা;)
কদ্দাথ

113

এটি আমার পক্ষে কাজ করেছে:

SetEnvIf Origin "^http(s)?://(.+\.)?(domain\.example|domain2\.example)$" origin_is=$0 
Header always set Access-Control-Allow-Origin %{origin_is}e env=origin_is

Putোকানো হলে .htaccess, এটি নিশ্চিতভাবে কাজ করবে।


24
আমার জন্য সর্বোত্তম সমাধান, তবে আমি বন্দর সমর্থন যুক্ত করেছি (উদাঃ লোকালহস্ট: উন্নয়নের জন্য 3000 ): সেটইনভিআইফ উত্স "^ http (গুলি)?: // (। + \।)? (লোকালহস্ট | স্ট্যাকওভারফ্লো ডটকম | উদাহরণ 1.com) ( : [0-9] +)? $ "উত্স_আস = $ 0
ভিজুরমা

2
স্ট্যাকওভারফ্লো জুড়ে বেশ কয়েকটি উত্তরগুলির মধ্যে, এটিই কাজ করেছিল।
মিলাই ডটকম

আমি যোগ করা প্রয়োজন Header set Access-Control-Allow-Credentials true@George এর উত্তর মত এটির জন্য কাজ করতে
99 সমস্যা - সিনট্যাক্স এক নয়

আমি যখন অরিজিন ব্যবহার করি এটি নিশ্চিতভাবে কাজ করে। তবে কিছু ক্ষেত্রে, অরিজিন কিছু অনুরোধে পাওয়া যায় না এবং এটি ব্রাউজার নির্দিষ্টও। তারপরে, আমি Refererপরিবর্তে ব্যবহার করার সিদ্ধান্ত নিয়েছি Origin। ব্যবহার Refererকাজ কিন্তু সমস্যা এটা সম্পূর্ণ URL ফিরে সেট করে হয় Access-Control-Allow-Originআমি আউট ডোমেইন নাম কাটা চাই Refererএবং তা নির্ধারণ Access-Control-Allow-Origin। এর ফলাফলের মতো কিছু - echo http://example.com/index.php/ab/cd | cut -d'/' -f1,2,3বাশ কমান্ডে। (অ্যাপাচি) কনফাইট ফাইলে কি একই কাজ করা সম্ভব? কোন ধারণা?
3 ক

1
এটি আমার পক্ষে কাজ করে না। আমি 2 লাইন যুক্ত করার সময় সর্বদা একটি 500 ত্রুটি থাকা। আসলে পিএইচপি 5.6.15 ব্যবহার করছেন
BoCyrill

91

আমার woff-font- তে একই সমস্যা ছিল, একাধিক সাব-ডোমেন অ্যাক্সেস করতে হয়েছিল। সাবডোমেনগুলিকে অনুমতি দেওয়ার জন্য আমি আমার httpd.conf এ এর ​​মতো কিছু যুক্ত করেছি:

SetEnvIf Origin "^(.*\.example\.com)$" ORIGIN_SUB_DOMAIN=$1
<FilesMatch "\.woff$">
    Header set Access-Control-Allow-Origin "%{ORIGIN_SUB_DOMAIN}e" env=ORIGIN_SUB_DOMAIN
</FilesMatch>

একাধিক ডোমেনের জন্য আপনি কেবলমাত্র রেজেক্সটিকে পরিবর্তন করতে পারেন SetEnvIf


4
কৌতুকটি করেছেন। আপনি নিয়মিত অভিব্যক্তিটি সঠিকভাবে মানিয়ে নিয়েছেন তা নিশ্চিত করুন। আমার নিজের ডোমেনটিকে অনুমতি দেওয়ার জন্য একটি প্রশ্ন চিহ্ন যুক্ত করা দরকার, যেমন এবং এর (.*\.?example\.org)জন্য । example.comsub.example.com
ট্রকোচ

3
আইআইএস 7 এর জন্য এটি কীভাবে মানিয়ে নেওয়ার বিষয়ে কোনও চিন্তাভাবনা রয়েছে?
চিহ্নিত করুন

এটি কি উদ্দেশ্যকে পরাস্ত করছে না? কোনও দূষিত ব্যবহারকারীকে মূল শিরোনামের মানটি তৈরি থেকে বাধা দেবে কী?
গ্রেগরি জোসেফ

1
@ গ্রাগরিজোসেফ অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স এমন কারও কাছ থেকে রিসোর্সগুলি গোপন করার বিষয়ে নয় যে এটির অনুরোধ করতে পারে। এটি কোনও দূষিত সাইটটিকে আপনার সাইটে শেষ ব্যবহারকারীদের কল করতে বাধা দেওয়ার বিষয়ে about ফন্ট ফাইলগুলির ক্ষেত্রে, এটি কেবল কার্যকরভাবে হরফ লিঙ্কগুলিকে হরফ লিঙ্কিং সীমাবদ্ধ করতে পারে, কেন তারা (মোজিলা / ফায়ারফক্স) অন্যান্য সংস্থাগুলির (জেস, সিএসএস, ইত্যাদি) একই কাজ করেনি তা আমার বাইরে।
ট্র্যাকার 1

@ ট্রকোচ, আপনার রেজেক্সে একটি বাগ আছে, এটিও অনুমতি দেবে subexample.com। আপনার এটিতে পরিবর্তন করা উচিত:((.*\.)?example\.org)
ব্লুজমুন

65

অরিজিন শিরোনামটি কীভাবে ফিরে আসে তা যদি এটি আপনার ডোমেন Nginx এর সাথে মেলে তবে এটি কার্যকর যদি আপনি কোনও ফন্ট একাধিক সাব-ডোমেন পরিবেশন করতে চান:

location /fonts {
    # this will echo back the origin header
    if ($http_origin ~ "example.org$") {
        add_header "Access-Control-Allow-Origin" $http_origin;
    }
}

এটি কীভাবে এর থেকে আলাদা তা বুঝতে পারি না: add_header অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স *; বোঝাতে কি যত্ন?
অ্যানয়েজ

এটি এমন একটি শিরোনাম ফিরিয়ে দিতে চলেছে যা ব্রাউজারকে কেবলমাত্র নির্দিষ্ট ডোমেন থেকে অনুরোধগুলি প্রেরণের অনুমতি দেয়। যদি আমি অনুমান করে থাকি যে আমি বলব যে অন্যথায় অন্যথায় সার্ভার অ্যাক্সেস করার জন্য ব্রাউজারটি সেই পৃষ্ঠাতে লোড হওয়া অন্য ডোমেন থেকে সামগ্রীটি অনুমোদন করতে পারে।
mjallday

7
@ অয়েঞ্জের একটি জিনিসের জন্য বর্ধিত সুরক্ষা হতে পারে যেখানে "মঞ্জুরি দিন" * এর অনুমতি নেই তবে অনুমতি শিরোনামের জন্য একটি নির্দিষ্ট এবং মিলে যাওয়া হোস্টের নাম। এখানে একটি উদাহরণ, যদি আপনি অনুমোদনের তথ্য ক্রস ডোমেন প্রেরণ করতে চান, আপনি "অনুমতি দিন *" ব্যবহার করতে পারবেন না
টিসিসি

3
এটি .নিয়মিত বহিঃপ্রকাশের কারণে উদাহরণ.আরোগের কোনও মূল্য হিসাবে ব্যাখ্যা করা যায়? কোন ক্ষেত্রে, এটি ভুলভাবে একটি কাস্টম উদাহরণ-org টিএলডি অনুমতি দেবে?
আটকে

1
একটি সঠিক রেজেক্স হওয়া উচিত "^example\.org$"কারণ আপনাকে নিশ্চিত করতে হবে যে কোনও হ্যাকার আপনার subdomainexample.orgব্যবহারের (ব্যবহার ^) বা example.orgevil(ব্যবহার $) বা examplezorg(অব্যাহতি \.) দিয়ে পিছলে যেতে পারে না
জেগ

27

আমি পিএইচপি অ্যাপ্লিকেশনটির জন্য যা করেছি তা এজেএক্স দ্বারা অনুরোধ করা হচ্ছে

$request_headers        = apache_request_headers();
$http_origin            = $request_headers['Origin'];
$allowed_http_origins   = array(
                            "http://myDumbDomain.example"   ,
                            "http://anotherDumbDomain.example"  ,
                            "http://localhost"  ,
                          );
if (in_array($http_origin, $allowed_http_origins)){  
    @header("Access-Control-Allow-Origin: " . $http_origin);
}

যদি অনুরোধের উত্সটি আমার সার্ভারের দ্বারা অনুমোদিত হয় $http_originতবে Access-Control-Allow-Originএকটি *ওয়াইল্ডকার্ড ফিরিয়ে না দিয়ে শিরোনামের মান হিসাবে নিজেকেই ফিরিয়ে দিন ।


20

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


4
আপনি কি এই বিষয়ে বিস্তারিত বলতে পারেন, বা আমাদের কোথাও নির্দেশ করুন যাতে আমরা আরও তথ্যের সন্ধান করতে পারি? আমি লাইমলাইটের সাহায্যে এটি করতে চাই এবং আমি আশা করি আপনি ভুল করছেন। আমাদের প্রযুক্তিবিদগুলির মধ্যে একজন বলেছেন যে আমাদের সিডিএন বীজ সার্ভার যতক্ষণ হেডার পাঠায় ততক্ষণ সিডিএন নিজেই এটি প্রেরণ করবে। এটি এখনও পরীক্ষা করে দেখুন
বিটি

12
ক্যাশে বা সিডিএন যদি উদ্বেগের বিষয় থাকে তবে ভিন্ন উত্সের অনুরোধ শিরোনামের মানগুলির জন্য পৃথক প্রতিক্রিয়া রাখতে ক্যাশে / সিডিএনকে বলতে ভেরি শিরোনাম ব্যবহার করুন use আপনি আপনার প্রতিক্রিয়াতে "ভার্য: উত্স" এর মতো শিরোনাম অন্তর্ভুক্ত করবেন। ক্যাশে / সিডিএন তখন জানে যে এটির শিরোনাম "উত্স: foo.example.com " সহ একটি অনুরোধের একটি প্রতিক্রিয়া এবং শিরোনাম "উত্স: বার.এক্সামেল.কম " এর সাথে অনুরোধের আলাদা প্রতিক্রিয়া পাঠানো উচিত
শান

Vary: Origin আকামাই সমর্থিত নয় , এটি অন্যতম বৃহত্তম সিডিএন এর বাইরে ... আরও বিশদ এখানেও উপলভ্য
ব্র্যাড পার্কস

20

একাধিক ডোমেনের জন্য, আপনার .htaccess:

<IfModule mod_headers.c>
    SetEnvIf Origin "http(s)?://(www\.)?(domain1.example|domain2.example)$" AccessControlAllowOrigin=$0$1
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    Header set Access-Control-Allow-Credentials true
</IfModule>

4
এই স্নিপেটটি আমার পক্ষে পুরোপুরি কাজ করে। তবে আমি বুঝতে পারি না এটি কী করে: ডি
কার্ল অ্যাডলার

2
এটি আমার পক্ষে কাজ করেছে, যদিও আমাকে '^' অর্থাৎ ... সেটেনভিআইফ উত্স "^ http (গুলি)?: // (www \।) যোগ করতে হয়েছিল?
জিপসিদেব

এটি স্ট্যাকওভারফ্লো . com/a/14034228/209139 এর মতো প্রায় একই কাজ করে । এটি ঠিক যে .htaccess সিনট্যাক্সটি পিএইচপি এর চেয়ে পড়া খুব শক্ত। Header set Vary Originএই উত্তরের একটি চমৎকার সংযোজন হবে।
ট্রিগ

1
আপনার সহায়তার জন্য অনেক ধন্যবাদ
দুর্দান্ত পারফেকশনিস্ট

2
আমি পরিবর্তন করতে হয়েছিল AccessControlAllowOrigin=$0$1করার AccessControlAllowOrigin=$0। অন্যথায়, এটি HTTPS উত্সের জন্য কাজ করে না didn't http://example.comসঠিকভাবে বেরিয়ে এসেছিল, তবে শেষে অতিরিক্ত https://example.comহিসাবে বেরিয়ে এসেছিল । https://example.comss
ট্রিগ

17

Nginx ব্যবহারকারীদের একাধিক ডোমেনের জন্য CORS অনুমতি দেওয়ার জন্য। আমি @ মার্শালের উদাহরণটি পছন্দ করি যদিও তার আওয়ারগুলি কেবল একটি ডোমেনের সাথে মেলে। ডোমেনের একটি তালিকা এবং সাবডোমেনের তালিকার সাথে মেলে এই রেজেক্সটি ফন্টগুলির সাথে কাজ করা সহজ করে:

location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ {
   if ( $http_origin ~* (https?://(.+\.)?(domain1|domain2|domain3)\.(?:me|co|com)$) ) {
      add_header "Access-Control-Allow-Origin" "$http_origin";
   }
}

এটি কেবলমাত্র "অ্যাক্সেস-কন্ট্রোল-অলজিন-অরিজিন" শিরোনামকে প্রতিধ্বনিত করবে যা প্রদত্ত ডোমেনগুলির তালিকার সাথে মেলে।


Think z দিয়ে শেষ পর্যন্ত আপনার সেই রেজেক্সটি লক করা দরকার বলে মনে করুন কারণ অন্যথায় ডোমেন 3 ডটকম।
dft

@ ডিফ্ট আমরা শেষে We সংজ্ঞা দিচ্ছি যা এটি করে
অ্যাড্রিয়ানো রোসা

দুঃখিত, আমি সংক্ষিপ্ত উদাহরণের মধ্যে বোঝাতে চাইছি, @ অ্যাড্রিয়ানোরোসার আসল পোস্টটি \ z
dft


13

জাভা ওয়েব অ্যাপ্লিকেশনটির জন্য ইস্তেস্টগুইয়ের উত্তর ভিত্তিক একটি সমাধান এখানে।

আমি জার্সি REST 1.x ব্যবহার করছি

জার্সি REST এবং CORSResponseFilter সম্পর্কে সচেতন হতে ওয়েব.এক্সএমএল কনফিগার করুন

 <!-- Jersey REST config -->
  <servlet>    
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param> 
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
      <param-value>com.your.package.CORSResponseFilter</param-value>
    </init-param>   
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.your.package</param-value>
    </init-param>        
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/ws/*</url-pattern>
  </servlet-mapping>

CORSResponseFilter এর কোড এখানে

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;


public class CORSResponseFilter implements ContainerResponseFilter{

@Override
public ContainerResponse filter(ContainerRequest request,
        ContainerResponse response) {

    String[] allowDomain = {"http://localhost:9000","https://my.domain.example"};
    Set<String> allowedOrigins = new HashSet<String>(Arrays.asList (allowDomain));                  

    String originHeader = request.getHeaderValue("Origin");

    if(allowedOrigins.contains(originHeader)) {
        response.getHttpHeaders().add("Access-Control-Allow-Origin", originHeader);

        response.getHttpHeaders().add("Access-Control-Allow-Headers",
                "origin, content-type, accept, authorization");
        response.getHttpHeaders().add("Access-Control-Allow-Credentials", "true");
        response.getHttpHeaders().add("Access-Control-Allow-Methods",
                "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }

    return response;
}

}

উপরের লিঙ্কটি মেয়াদোত্তীর্ণ হয়ে গেছে, আপনি কি নতুন যুক্ত করতে পারেন, বা আরও বিশদ সহ উত্তর আপডেট করতে পারেন, ধন্যবাদ
রাজকুমার সমালা

আমি আরো বিস্তারিত জানার জুড়েছেন, আশা করি এই সাহায্য করে
duvo

12

উপরে উল্লিখিত হিসাবে, Access-Control-Allow-Originঅনন্য Varyহওয়া উচিত এবং সেট করা উচিতOrigin আপনি কোনও সিডিএন (সামগ্রী বিতরণ নেটওয়ার্ক) এর পিছনে থাকলে ।

আমার এনগিনেক্স কনফিগারেশনের প্রাসঙ্গিক অংশ:

if ($http_origin ~* (https?://.*\.mydomain.example(:[0-9]+)?)) {
  set $cors "true";
}
if ($cors = "true") {
  add_header 'Access-Control-Allow-Origin' "$http_origin";
  add_header 'X-Frame-Options' "ALLOW FROM $http_origin";
  add_header 'Access-Control-Allow-Credentials' 'true';
  add_header 'Vary' 'Origin';
}

হয়েছে set $corsগোপন অর্থ কোন ধরণের, অথবা এটি শুধু আপনার conifg নির্দিষ্ট হয়? দেখে মনে হচ্ছে এটি দ্বিতীয়if
মাইকেজটার

এটি ঠিক আছে, আপনি যদি শিরোনামগুলি সেট করতে কেবলমাত্র শর্তটি পরীক্ষা করেন তবে এটি বাদ দেওয়া যেতে পারে, আমার কনফিগারেশনে আমার একাধিক ছিল।
hernvnc

9

হয়তো আমি ভুল, কিন্তু যতদূর আমি দেখতে পাচ্ছি Access-Control-Allow-Originএকটি আছে"origin-list" প্যারামিটার রয়েছে।

দ্বারা সংজ্ঞা একটি origin-listহল:

origin            = "origin" ":" 1*WSP [ "null" / origin-list ]
origin-list       = serialized-origin *( 1*WSP serialized-origin )
serialized-origin = scheme "://" host [ ":" port ]
                  ; <scheme>, <host>, <port> productions from RFC3986

এবং এ থেকে, আমি যুক্তি দিচ্ছি যে বিভিন্ন উত্স ভর্তি হয়েছে এবং স্থান পৃথক করা উচিত ।


2
এটি অনুমানের সঠিক ব্যাখ্যা বলে মনে হচ্ছে; যা বলেছিল, বর্তমান ব্রাউজারগুলি দ্বারা অনুমানটি সম্পূর্ণরূপে সমর্থিত বলে মনে হয় না (উদাহরণস্বরূপ, আমি এটি কেবল ফায়ারফক্স ১ 17.০ এ পরীক্ষা করে দেখেছি যে এটি কার্যকর হবে না)।
রিক রিয়েনশে

7
CORS স্পেসিফিকেশন অধ্যায় 5.1 Access-Control-Allow-Origin Response Headerবলে যে মূল-তালিকা সীমাবদ্ধ হয়: বরং উদ্ভব একটি স্থান পৃথক করা তালিকা যার ফলে চেয়ে, এটা হয় একটি মাত্র মূল বা স্ট্রিং "নাল" হয়।
ম্যাক্সপলক

2
আমি আমার নিজের উত্তরের মন্তব্যে যেমন উল্লেখ করেছি, এটি একটি বাস্তবায়নকারীদের নোটের অংশ, কোনও আরএফসি 2119 প্রয়োজন নয়। 'সঠিক' উত্তরটি হ'ল স্থান-সীমিত মানগুলি ব্যবহার করা। সমস্যাটি হ'ল বাস্তবায়ন অসম্পূর্ণ এবং তাই 'সঠিক' উত্তরটি কার্যকরভাবে কাজ করে না। এটা করা উচিত, কিন্তু এটি না। তবে ভবিষ্যতে বাস্তবায়নগুলি আরও ভাল হওয়ার সাথে সাথে এটি পরিবর্তিত হতে পারে।
বব আমান

8

এক্সপ্রেসজেএস অ্যাপ্লিকেশনগুলির জন্য আপনি ব্যবহার করতে পারেন:

app.use((req, res, next) => {
    const corsWhitelist = [
        'https://domain1.example',
        'https://domain2.example',
        'https://domain3.example'
    ];
    if (corsWhitelist.indexOf(req.headers.origin) !== -1) {
        res.header('Access-Control-Allow-Origin', req.headers.origin);
        res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
    }

    next();
});

এটি পরবর্তী কল করে অন্য সমস্ত কলকে মঞ্জুরি দেবে ...
আইভজেন নায়দা

@ আইভজেননায়েদা তাই? ব্যাপারটা কি?
আইক্যাচআপ আপ

7

আমি এইচটিটিপিএস চালিত একটি ডোমেনের জন্য এটি সেট আপ করার জন্য সংগ্রাম করেছি, তাই আমি বুঝতে পেরেছি যে সমাধানটি ভাগ করে নেব। আমি আমার httpd.conf ফাইলটিতে নিম্নলিখিত নির্দেশাবলী ব্যবহার করেছি :

    <FilesMatch "\.(ttf|otf|eot|woff)$">
            SetEnvIf Origin "^http(s)?://(.+\.)?example\.com$" AccessControlAllowOrigin=$0
            Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    </FilesMatch>

example.comআপনার ডোমেন নাম পরিবর্তন করুন । এই ভিতরে যোগ করুন <VirtualHost x.x.x.x:xx>আপনার httpd.conf ফাইল। লক্ষ্য করুন যে আপনার যদি VirtualHostএকটি পোর্ট প্রত্যয় (যেমন :80) থাকে তবে এই নির্দেশটি HTTPS- র ক্ষেত্রে প্রযোজ্য হবে না, সুতরাং আপনাকে / etc / apache2 / সাইটগুলি উপলব্ধ / ডিফল্ট-এসএসএল এ যেতে হবে এবং সেই ফাইলের ভিতরে একই নির্দেশিকা যুক্ত করতে হবে এর<VirtualHost _default_:443> অধ্যায়।

কনফিগার ফাইলগুলি আপডেট হয়ে গেলে, আপনাকে টার্মিনালে নিম্নলিখিত কমান্ডগুলি চালনা করতে হবে:

a2enmod headers
sudo service apache2 reload

আমি এই বিকল্পটি পছন্দ করি এবং @ জর্জ এর প্রয়োগের সাথে এটি সংযুক্ত / সংশোধিত। কখনও কখনও সার্ভারগুলিতে a2enmod উপলব্ধ থাকে না, সুতরাং আপনাকে যা করতে হবে তা আপনার প্রধান httpd.conf পরীক্ষা করে দেখতে হবে যে লাইনটি: LoadModule শিরোনাম_মডিউল মডিউলগুলি / mod_headers.so নিরবিচ্ছিন্ন।
মাইক Kormendy

আমার ^http(s)?://(.+\.)?example\.com(:\d+)?$
উত্সটির

5

আপনার যদি হরফের সমস্যা হয় তবে ব্যবহার করুন:

<FilesMatch "\.(ttf|ttc|otf|eot|woff)$">
    <IfModule mod_headers>
        Header set Access-Control-Allow-Origin "*"
    </IfModule>
</FilesMatch>

3

আরও বেশি নমনীয় পদ্ধতি হ'ল অ্যাপাচি ২.৪ এর অভিব্যক্তি ব্যবহার করা। আপনি ডোমেন, পাথ এবং প্রায় প্রতিটি অনুরোধ পরিবর্তনশীলের সাথে মিল করতে পারেন। যদিও পাঠানো প্রতিক্রিয়া সর্বদা থাকে *তবে কেবল এটির অনুরোধকারীরা হ'ল যে কোনওভাবে প্রয়োজনীয়তা পূরণ করে। ব্যবহার Origin(বা অন্য কোন) এক্সপ্রেশনে অনুরোধ শীর্ষক স্বয়ংক্রিয়ভাবে সেটিকে একত্রীকরণ এ্যাপাচি ঘটায় Vary, প্রতিক্রিয়া শীর্ষক যাতে প্রতিক্রিয়া একটি ভিন্ন উৎপত্তি জন্য পুনঃব্যবহৃত করা হবে না।

<IfModule mod_headers.c>
    <If "%{HTTP:Host} =~ /\\bcdndomain\\.example$/i && %{HTTP:Origin} =~ /\\bmaindomain\\.example$/i">
        Header set Access-Control-Allow-Origin "*"
    </If>
</IfModule>

2
আমি এখানে এসেছি কারণ কিছু ব্রাউজার *লগইনের মতো শংসাপত্রগুলি গ্রহণ করে না । সুতরাং এটি ভালো হতে হবে যদি আপনি পরিবর্তে মিলেছে হোস্টনাম পাস *
কেইটেলডোগ

@ কিটেলডগ কীভাবে প্রতিটি ডোমেনের জন্য কোডটি পুনরাবৃত্তি না করে একাধিক উত্স পাওয়া গেলে কীভাবে একজন গতিশীলভাবে সঠিক উত্সটি ক্যাপচার করে এবং এটিকে ফেরত পাঠায়? দেখে মনে হচ্ছে এটি এক্সপ্রেশন দিয়ে সম্ভব হতে পারে তবে ডক্সটি আমার কাছে পরিষ্কার নয়।
ওয়ালফ

প্রকৃতপক্ষে আমার আসল সমস্যাটি হ'ল কারণ ল্যারাভেল প্রিফলাইট অনুরোধের Access-Control-Allow-Originজন্য OPTIONSশিরোনামটি ফিরিয়ে দেয়নি যা সার্ভারের এই উত্সকে অনুমোদন দেয় কিনা তা পরীক্ষা করে দেখুন কিনা তা শিরোনাম। আমি এটা ঠিক আছে। তাই *আমার পক্ষে আসল সমস্যা ছিল না। কিন্তু, এখনও কিছু ব্রাউজার গ্রহণ করা হয় না *শংসাপত্রের সঙ্গে, তাই যখন একটি ওয়েব অ্যাপ্লিকেশন ক্রশ-অরিজিন অনুরোধ পাঠাচ্ছে, তারা নির্দিষ্ট করতে হবে HTTP_ORIGINহেডার আপনি পরিবর্তনশীল সঙ্গে পরিবর্তনশীল অ্যাক্সেস পারে Originমধ্যে .htaccess, অথবা Apache জন্য $_SERVER['HTTP_ORIGIN'];পিএইচপি। যাইহোক আপনার সমাধানটি সমস্ত উত্সের অনুমতি দেয় কারণ এটি ভাল তবে কম সুরক্ষিত
কেইটেলডোগ

তবে 2 টি জিনিস মনে রাখতে হবে যে 1) সরবরাহ করা *সমস্ত কিছুর অনুমতি দেয়। 2) হোস্টটি ORIGIN থেকে আলাদা। HOST হ'ল আসল 'টার্গেট হোস্ট' যা শিরোনামের অনুরোধের জন্য পাস হয়। তবে ORIGIN হ'ল INITIAL HOSTঅনুরোধটি প্রেরণ করুন TARGET HOST। অতএব আপনার কোডে, ORIGIN HOSTউপেক্ষা করা হয় এবং কখনও ব্যবহৃত হয় না। উপরের উত্তরগুলি দেখুন এবং তারা দেখতে পাবেন যে তারা কীভাবে ORIGINএগুলিকে যুক্ত করতে ব্যবহার করে Access-Control-Allow-Origin
কীটেলডোগ

@ কিটেলডোগ *সবাইকে অনুমতি দেয় না কারণ Originএক্সপ্রেশনটিতে অনুরোধ শিরোনাম ব্যবহার করার কারণে অ্যাপাচি স্বয়ংক্রিয়ভাবে Varyপ্রতিক্রিয়া শিরোনামে মিশে যায় , যদি না কেউ ব্যবহার করে req_novary('Origin')(সম্ভবত অনাকাঙ্ক্ষিত)। ব্রাউজারগুলি জানে যে তারা ভিন্নর জন্য আলাদা প্রতিক্রিয়া পেতে পারে Originএবং প্রেরিত মান যদি কোনও পরীক্ষায় পাস না করে তবে Access-Control-Allow-Originশিরোনামটি কখনও সেট করা থাকে না।
ওয়ালফ

2

HTTP_ORIGIN সমস্ত ব্রাউজার ব্যবহার করে না। HTTP_ORIGIN কতটা নিরাপদ? আমার জন্য এটি এফএফ খালি আসে।
আমার যে সাইটগুলিতে আমার সাইটে অ্যাক্সেসের অনুমতি দেওয়া হয়েছে সেগুলি আমার কাছে কোনও সাইট আইডি প্রেরণ করে, আমি তারপরে সেই আইডি সহ রেকর্ডের জন্য আমার ডিবি চেক করে SITE_URL কলাম মান (www.yoursite.com) পাই।

header('Access-Control-Allow-Origin: http://'.$row['SITE_URL']);

এমনকি যদি কোনও বৈধ সাইটের আইডি প্রেরণ করে তবে অনুরোধটি সেই সাইটের আইডির সাথে যুক্ত আমার ডিবিতে তালিকাভুক্ত ডোমেন থেকে হওয়া দরকার।


2

অ্যাপাচি-র জন্য এখানে একটি বিস্তৃত বিকল্প রয়েছে যাতে সাম্প্রতিকতম এবং পরিকল্পিত ফন্ট সংজ্ঞাগুলির কিছু রয়েছে:

<FilesMatch "\.(ttf|otf|eot|woff|woff2|sfnt|svg)$">
    <IfModule mod_headers.c>
        SetEnvIf Origin "^http(s)?://(.+\.)?(domainname1|domainname2|domainname3)\.(?:com|net|org)$" AccessControlAllowOrigin=$0$1$2
        Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        Header set Access-Control-Allow-Credentials true
    </IfModule>
</FilesMatch>

2

একটি এএসএমএক্স পরিষেবাদির জন্য একাধিক ডোমেন অ্যাক্সেসের সুবিধার্থে, আমি গ্লোবাল.এক্সএক্স ফাইলটিতে এই ফাংশনটি তৈরি করেছি:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    string CORSServices = "/account.asmx|/account2.asmx";
    if (CORSServices.IndexOf(HttpContext.Current.Request.Url.AbsolutePath) > -1)
    {
        string allowedDomains = "http://xxx.yyy.example|http://aaa.bbb.example";

        if(allowedDomains.IndexOf(HttpContext.Current.Request.Headers["Origin"]) > -1)
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", HttpContext.Current.Request.Headers["Origin"]);

        if(HttpContext.Current.Request.HttpMethod == "OPTIONS")
            HttpContext.Current.Response.End();
    }
}

এটি OPTIONSক্রিয়াটিও CORS পরিচালনা করার জন্য অনুমতি দেয় ।


2

সাবডোমেনগুলির সাথে মিলে যাওয়ার জন্য পিএইচপি কোড উদাহরণ।

if( preg_match("/http:\/\/(.*?)\.yourdomain.example/", $_SERVER['HTTP_ORIGIN'], $matches )) {
        $theMatch = $matches[0];
        header('Access-Control-Allow-Origin: ' . $theMatch);
}

2

নেট অ্যাপ্লিকেশনগুলির জন্য মোটামুটি সহজ অনুলিপি / পেস্টের জন্য, আমি কোনও global.asaxফাইলের মধ্যে থেকে সিওআরএস সক্ষম করতে এটি লিখেছিলাম । এই কোডটি বর্তমানে গৃহীত উত্তরে প্রদত্ত পরামর্শ অনুসরণ করে, প্রতিক্রিয়াটির অনুরোধে যা কিছু উত্স ফিরে এসেছে তা প্রতিফলিত করে। এটি কার্যকরভাবে এটি ব্যবহার না করে '*' অর্জন করে।

এর কারণ হ'ল এটি 'উইথসিডেন্টিয়ালস' বৈশিষ্ট্যটি 'সত্য' এ সেট করে একটি এজেএক্স এক্সএমএলএইচটিপিআরকোস্ট পাঠানোর ক্ষমতা সহ একাধিক অন্যান্য সিওআরএস বৈশিষ্ট্য সক্ষম করে।

void Application_BeginRequest(object sender, EventArgs e)
{
    if (Request.HttpMethod == "OPTIONS")
    {
        Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
        Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
        Response.AddHeader("Access-Control-Max-Age", "1728000");
        Response.End();
    }
    else
    {
        Response.AddHeader("Access-Control-Allow-Credentials", "true");

        if (Request.Headers["Origin"] != null)
            Response.AddHeader("Access-Control-Allow-Origin" , Request.Headers["Origin"]);
        else
            Response.AddHeader("Access-Control-Allow-Origin" , "*");
    }
}

2

পিএইচপি কোড:

$httpOrigin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : null;
if (in_array($httpOrigin, [
    'http://localhost:9000', // Co-worker dev-server
    'http://127.0.0.1:9001', // My dev-server
])) header("Access-Control-Allow-Origin: ${httpOrigin}");
header('Access-Control-Allow-Credentials: true');

1

এবং জ্যাঙ্গোর আরও একটি উত্তর। একক দর্শনটি একাধিক ডোমেন থেকে সিওআরএসকে অনুমতি দেয়, এখানে আমার কোডটি রয়েছে:

def my_view(request):
    if 'HTTP_ORIGIN' in request.META.keys() and request.META['HTTP_ORIGIN'] in ['http://allowed-unsecure-domain.com', 'https://allowed-secure-domain.com', ...]:
        response = my_view_response() # Create your desired response data: JsonResponse, HttpResponse...
        # Then add CORS headers for access from delivery
        response["Access-Control-Allow-Origin"] = request.META['HTTP_ORIGIN']
        response["Access-Control-Allow-Methods"] = "GET" # "GET, POST, PUT, DELETE, OPTIONS, HEAD"
        response["Access-Control-Max-Age"] = "1000"  
        response["Access-Control-Allow-Headers"] = "*"  
        return response

1

এডাব্লুএস ল্যাম্বদা / এপিআই গেটওয়ে

সার্ভারলেস এডাব্লুএস ল্যাম্বদা এবং এপিআই গেটওয়েতে একাধিক উত্স কীভাবে কনফিগার করা যায় সে সম্পর্কিত তথ্যের জন্য - যে কোনও ব্যক্তির মনে হবে যে এটির জন্য সহজ সমাধান হওয়া উচিত তার জন্য একটি বৃহত্তর সমাধান - এখানে দেখুন:

https://stackoverflow.com/a/41708323/1624933


বর্তমানে এপিআই গেটওয়েতে একাধিক উত্স কনফিগার করা সম্ভব নয়, এখানে দেখুন: https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors-console.html ), তবে প্রস্তাবটি (এতে উপরের উত্তর) হ'ল:

  • ব্রাউজার দ্বারা প্রেরিত অরিজিন শিরোনামটি পরীক্ষা করুন
  • উত্সের শ্বেত তালিকার বিরুদ্ধে এটি পরীক্ষা করুন
  • যদি এটি মেলে, আগত অরিজিনটিকে অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-অরিজিনের শিরোনাম হিসাবে ফিরিয়ে দিন, অন্যথায় কোনও স্থানধারক (ডিফল্ট উত্স) ফিরিয়ে দিন।

সহজ সমাধানটি অবশ্যই সমস্ত (*) এর মতো করে সক্ষম করে:

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS
        },
        body: JSON.stringify([{

তবে এটি API গেটওয়ে সাইডে করা ভাল (উপরের ২ য় লিঙ্কটি দেখুন)।


2
Access-Control-Allow-Credentials: trueওয়াইল্ডকার্ডের সাথে অনুমোদিত নয় Access-Control-Allow-Origin: *<origin>পরিবর্তে একটি নির্দিষ্ট সেট করুন ।
টম

@ টম, হ্যাঁ, কেন সেখানে ছিল তা নিশ্চিত নই, আমি মনে করতে পারি না, তবে আমি এডাব্লুএস-এ যুক্ত হওয়া ডিফল্টগুলি থেকে এটি অনুলিপি করে থাকতে পারি? যদিও এটি নির্দেশ করার জন্য ধন্যবাদ।
টিএমএইচসি 22

0

এসএসএল এবং আরএফসিতে ব্যাকরণের মাধ্যমে বিজ্ঞাপন সরবরাহ করার ক্ষেত্রে গুগলের সমর্থন উত্তরগুলি মনে হয় যে আপনি ইউআরএল স্থান পরিবর্তন করতে পারবেন। এটি বিভিন্ন ব্রাউজারে কতটা সমর্থিত তা নিশ্চিত নয়।


বৈশিষ্ট লিঙ্ক 'SSL- র মাধ্যমে বিজ্ঞাপনগুলি পরিবেশন' w3.org/TR/cors/#access-control-allow-origin-response-header যা একটি নোট যোগ করে, "বাস্তবে উৎপত্তি-তালিকা-অর-নাল উৎপাদন আরো সীমাবদ্ধ । উদ্ভব একটি স্থান পৃথক করা তালিকা যার ফলে চেয়ে বরং হয় একটি মাত্র মূল বা স্ট্রিং "নাল" হয়।
spazm

যদিও এই বিশদটি নোট করা গুরুত্বপূর্ণ, যখন কোনও স্পেসিফিকেশন "অনুশীলনে" বলে, এর অর্থ এই নয় যে এটি কেবল সেভাবে করা বৈধ। এর অর্থ হ'ল আপনি যদি সেভাবে এটি করেন তবে আপনি সমস্যার মধ্যে পড়তে পারেন কারণ বেশিরভাগ বাস্তবায়নকারীই ভুলটি বা অসম্পূর্ণভাবে এই পরিকল্পনাটি প্রয়োগ করেন। স্পেসিফিকেশনটি একটি স্পেস-বিভাজিত উত্সের তালিকার জন্য মঞ্জুরি দেয়, যা আপনি এখানে EBNF এর অধীনে দেখতে পাবেন origin-list: সরঞ্জাম. ietf.org/html/rfc6454#section-7.1
বব আমান

0

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

উদাহরণ স্বরূপ CTRL + SHIFT + DELগুগল ক্রোমে আপনার ক্যাশে মোছার জন্য।

অনেক খাঁটি .htaccessসমাধান চেষ্টা করার পরে এটি আমাকে এই কোডটি ব্যবহার করতে সহায়তা করেছিল এবং এটি কেবলমাত্র একমাত্র কাজ করছে (অন্তত আমার জন্য):

    Header add Access-Control-Allow-Origin "http://google.com"
    Header add Access-Control-Allow-Headers "authorization, origin, user-token, x-requested-with, content-type"
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

    <FilesMatch "\.(ttf|otf|eot|woff)$">
        <IfModule mod_headers.c>
            SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.com|dev02.otherdomain.net)$" AccessControlAllowOrigin=$0
            Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        </IfModule>
    </FilesMatch>

এছাড়াও নোট করুন যে এটি ব্যাপকভাবে ছড়িয়ে গেছে যে অনেকগুলি সমাধান বলে যে আপনাকে টাইপ করতে Header set ...হবে তবে তা Header add ...। আশা করি এটি আমার মতো এখন কয়েক ঘন্টা একই সমস্যায় পড়তে সহায়তা করবে।


0

নীচে উত্তরটি সি # এর সাথে নির্দিষ্ট, তবে ধারণাটি সমস্ত বিভিন্ন প্ল্যাটফর্মের ক্ষেত্রে প্রযোজ্য applicable

কোনও ওয়েব এপিআই থেকে ক্রস অরিজিন অনুরোধগুলিকে অনুমতি দেওয়ার জন্য আপনাকে আপনার অ্যাপ্লিকেশনটিতে অপশন অনুরোধগুলি মঞ্জুরি করতে হবে এবং নিয়ামক স্তরে নীচে টীকা যুক্ত করতে হবে।

[এ্যাবলিবলকর্স (আরলস্ট্রিং, শিরোলেখ, পদ্ধতি)] এখন উত্সগুলি কেবল স্ট্রিং হিসাবে পাস করা যেতে পারে। সুতরাং আপনি যদি অনুরোধে একাধিক ইউআরএল পাস করতে চান তবে এটিকে কমা বিচ্ছিন্ন মান হিসাবে পাস করুন।

আরআল স্ট্রিং = " https: //a.hello.com,https: //b.hello.com "


0

অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স শিরোনামের জন্য কেবল একটি একক উত্স নির্দিষ্ট করা যেতে পারে। তবে আপনি অনুরোধ অনুযায়ী আপনার প্রতিক্রিয়াতে মূলটি সেট করতে পারেন। ভেরি শিরোনাম সেট করতে ভুলবেন না। পিএইচপি-তে আমি নিম্নলিখিতগুলি করব:

    /**
     * Enable CORS for the passed origins.
     * Adds the Access-Control-Allow-Origin header to the response with the origin that matched the one in the request.
     * @param array $origins
     * @return string|null returns the matched origin or null
     */
    function allowOrigins($origins)
    {
        $val = $_SERVER['HTTP_ORIGIN'] ?? null;
        if (in_array($val, $origins, true)) {
            header('Access-Control-Allow-Origin: '.$val);
            header('Vary: Origin');

            return $val;
        }

        return null;
    }

  if (allowOrigins(['http://localhost', 'https://localhost'])) {
      echo your response here, e.g. token
  }

-2

আমরা এএসপিএন অ্যাপ্লিকেশনটির জন্য গ্লোবাল.অ্যাস্যাক্স ফাইলটিতে এটি সেট করতে পারি।

protected void Application_BeginRequest(object sender, EventArgs e)
    {

    // enable CORS
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "https://www.youtube.com");

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