ප්‍රවේශ-පාලනය-ඉඩ දෙන්න-සම්භවය බහු ප්‍රභව වසම්?


1066

Access-Control-Allow-Originශීර්ෂකය භාවිතා කරමින් බහු හරස් වසම් වලට ඉඩ දීමට ක්‍රමයක් තිබේද?

මම දන්නවා *, නමුත් එය විවෘතයි. මට ඇත්තටම අවශ්‍ය වන්නේ වසම් දෙකකට පමණි.

උදාහරණයක් ලෙස, මේ වගේ දෙයක්:

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

මම ඉහත කේතය උත්සාහ කර ඇති නමුත් එය ෆයර්ෆොක්ස් හි වැඩ කරන බවක් නොපෙනේ.

බහුවිධ වසම් නියම කළ හැකිද? නැතහොත් මම එකකින් පමණක් හිර වී සිටිනවාද?



3
නවීනතම ෆයර්ෆොක්ස් භාවිතා කරමින්, කොමා වලින් වෙන් වූ හෝ අභ්‍යවකාශයෙන් වෙන් වූ වසම් ක්‍රියා කළේ නැත. වසම් ලැයිස්තුවක් සමඟ ගැලපීම සහ ශීර්ෂයන්හි තනි ධාරකයෙකු තැබීම තවමත් වඩා හොඳ ආරක්ෂාවක් වන අතර එය නිසි ලෙස ක්‍රියා කරයි.
ඩැනියෙල් ඩබ්ලිව්.

2
ඔබ HTTPS සඳහා මේ සමඟ පොරබදන්නේ නම්, මම විසඳුමක් සොයා ගතිමි .
ඇලෙක්ස් ඩබ්ලිව්

7
වැදගත් සටහනක් : තුළ cretain වසම් පමනක් ඉඩAccess-Control-Allow-Originශීර්ෂ කරන්නේ නෑ අදහස් අනෙකුත් වසම් මෙම අන්ත ලක්ෂ්යය (උදා: බෝපාල් API ක්රමය) පිළිබඳ ක්රමය ඇවිලවිය නොහැකි බව. එහි අර්ථය වන්නේ ඉඩ නොදුන් මූලාරම්භයන්ට javascript හි ප්‍රති result ලය භාවිතා කළ නොහැකි බවයි (බ්‍රව්සරය මෙය සහතික කරයි). විශේෂිත වසම් සඳහා අන්ත ලක්ෂ්‍යයකට ප්‍රවේශය සීමා කිරීම සඳහා සේවාදායක පාර්ශවීය ඉල්ලීම් පෙරණයක් භාවිතා කරන්න. උදා: අවසර නොදුන් වසම් සඳහා HTTP 401 ආපසු එවයි.
klues

1
ඔබට Vary: Originබහු URL භාවිතා කිරීමට අවශ්‍ය විට ඔබ සැමවිටම ශීර්ෂකය එකතු කළ යුතුය , බලන්න: fetch.spec.whatwg.org/#cors-protocol-and-http-caches
Null

Answers:


872

එය කිරීමට නිර්දේශිත ක්‍රමය මෙන් පෙනේ, ඔබේ සේවාදායකයා සේවාදායකයා වෙතින් ප්‍රභව ශීර්ෂය කියවීම, එය ඔබ ඉඩ දීමට කැමති වසම් ලැයිස්තුව සමඟ සසඳන්න, එය ගැලපෙන්නේ නම්, 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>

41
W3C යෝජනා කරන දෙයට මෙය ගැලපේ - w3.org/TR/cors/#access-control-allow-origin-response-hea
සයිමන් බී.

155
මෙම පිළිතුර සමඟ මට ඇති ගැටලුව නම් එය ඇත්ත වශයෙන්ම මට උදව් නොකිරීමයි, මන්ද අප සීඩීඑන් එකක් භාවිතා කරන අතර පැහැදිලිවම සීඩීඑන් විසින් ශීර්ෂයන් ක්‍රමානුකූලව සකසන ආකාරය පාලනය කළ නොහැක.
බීටී

6
පහත දැක්වෙන මගේ පිළිතුරෙහි සත්‍ය උදාහරණය (Nginx) - stackoverflow.com/a/12414239/6084
mjallday

71
හැඹිලි හෝ CDNs උත්සුකතාවක් නම්, භාවිතා ශීර්ෂ වෙනස් වෙනස් සම්භවය ඉල්ලීම ශීර්ෂ වටිනාකම් සඳහා වෙන වෙනම පිළිතුරු තබා ගැනීමට පූර්වාපේක්ෂි / පස්වරුවේදී පහරදී තිබේ කියන්න. ඔබේ ප්‍රතිචාරයට "විචල්‍ය: සම්භවය" වැනි ශීර්ෂයක් ඇතුළත් වේ. : හැඹිලි / පස්වරුවේදී පහරදී තිබේ එය ශීර්ෂ "සම්භවය සහිත ඉල්ලීමක් එක් ප්රතිචාරයක් යැවීමට යුතු බව දන්නා foo.example.com , සහ ශීර්ෂ" සම්භවය: සමඟ ඉල්ලීමක් වෙනස් ප්රතිචාර " bar.example.com ".
ෂෝන්

10
සෙනසුරාදා, ඔබට ප්‍රභව ශීර්ෂයට ප්‍රවේශය ඇත්නම්, ඔබ CORS පසු කර ඇත.
පෝල් ඩ්‍රැපර්

223

මම PHP හි භාවිතා කරන තවත් විසඳුමක්:

$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
Stackoverflow.com/a/1850482/11635 හි යෝජනා කර ඇති ප්‍රවේශය භාවිතා නොකරන්නේ ඇයි [සහ ඉල්ලූ සම්භවය පමණක් වන ආදේශක කාඩ්පතක් එවන්න එපා]? වැඩි යමක් ලබා නොගෙන මෙය වඩාත් අවසර ද?
රූබන් බාර්ටලින්ක්

16
ඇති 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
Te ස්ටෙෆෙන්ආර් ඇත්ත වශයෙන්ම "පුළුල් සංවෘත" වඩා නිවැරදි වනු ඇත, මෙහි අරමුණ වන්නේ පිටපත වෙනත් වසම් වලට විවෘත කිරීමයි;)
කඩත්

115

මෙය මට ප්‍රයෝජනවත් විය:

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

දැමූ විට .htaccess, එය නිසැකවම ක්රියා කරනු ඇත.


24
මට හොඳම විසඳුම, නමුත් මම වරාය සහාය එක් කළෙමි (උදා: localhost: සංවර්ධනය සඳහා 3000 ): SetEnvIf Origin "^ http (s) ?: // (. + \.)? (localhost | stackoverflow.com | example1.com) ( : [0-9] +)? $ "Origin_is = $ 0
vszurma

2
ස්ටැක් ඕවර් ප්‍රවාහය වටා ඇති පිළිතුරු කිහිපයෙන්, මෙය ක්‍රියාත්මක විය.
Meetai.com

Header set Access-Control-Allow-Credentials trueජෝර්ජ්ගේ පිළිතුර
99 ගැටලු - සින්ටැක්ස්

මම ප්‍රභවය භාවිතා කරන විට මෙය නිසැකවම ක්‍රියාත්මක වේ. නමුත් සමහර අවස්ථාවලදී, සමහර ඉල්ලීම් වලදී සම්භවය ලබා ගත නොහැකි අතර එය බ්‍රව්සරයටද විශේෂිතය. පසුව, මම Refererඒ වෙනුවට භාවිතා කිරීමට තීරණය කළෙමි Origin. Refererකෘති භාවිතා කිරීම නමුත් ගැටළුව වන්නේ එය සම්පූර්ණ URL ය නැවත සකසා Access-Control-Allow-Originමට අවශ්‍ය වන්නේ ඩොමේන් නාමය කපා Refererඑය පැවරීමටය Access-Control-Allow-Origin. මෙහි ප්‍රති result ලය වැනි දෙයක් - echo http://example.com/index.php/ab/cd | cut -d'/' -f1,2,3bash විධානය තුළ. (Apache) conf ගොනුවේද මෙය කළ හැකිද? කිසියම් අදහසක් තිබේද?
3AK

1
මෙය මට වැඩ කරන්නේ නැත. මම පේළි 2 එකතු කරන විට සෑම විටම කේත 500 දෝෂයක් තිබීම. ඇත්ත වශයෙන්ම PHP 5.6.15 භාවිතා කිරීම
BoCyrill

91

මට වොෆ්-ෆොන්ට් සම්බන්ධයෙන් එකම ගැටළුවක් ඇති විය, බහු උප ඩොමේන වලට ප්‍රවේශය තිබිය යුතුය. උප ඩොමේන් වලට ඉඩ දීම සඳහා මම මගේ 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.comසහ sub.example.com.
trkoch

3
IIS 7 සඳහා මෙය අනුවර්තනය කරන්නේ කෙසේද යන්න පිළිබඳ කිසියම් අදහසක් තිබේද?
මාර්ක්

එය පරමාර්ථය පරාජය කිරීමක් නොවේද? අනිෂ්ට පරිශීලකයෙකුට ප්‍රභව ශීර්ෂ අගය ව්‍යාජ ලෙස සකස් කිරීමෙන් වළක්වන්නේ කුමක්ද?
ග්‍රෙගරි ජෝශප්

1
@ GrégoryJoseph Access-Control-Allow-Origin යනු ඉල්ලීමක් කළ හැකි අයෙකුගෙන් සම්පත් සැඟවීම නොවේ. එය අනිෂ්ට වෙබ් අඩවියක් අවසන් පරිශීලකයින් ඔබේ වෙබ් අඩවියට කැඳවීම වැළැක්වීමයි. අකුරු ලිපිගොනු සම්බන්ධයෙන් ගත් කල, මෙය font ලදායී ලෙස අකුරු සම්බන්ධ කිරීම සීමා කළ හැකිය, ඒවා (මොසිල්ලා / ෆයර්ෆොක්ස්) වෙනත් සම්පත් සඳහා (ජේඑස්, සීඑස්එස්, ආදිය) මා එසේ නොකළේ මන්ද?
ට්රැකර් 1

rtrkoch, ඔබේ රීජෙක්ස් හි දෝෂයක් තිබේ, එය ද ඉඩ දෙනු subexample.comඇත. ඔබ එය වෙනස් කළ යුත්තේ:((.*\.)?example\.org)
බ්ලූස්මූන්

67

ඔරිජින් ශීර්ෂය ඔබේ වසමට 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 Access-Control-Allow-Origin *; පැහැදිලි කිරීමට සැලකිලිමත්ද?
ඇනොයිස්

මෙය බ්‍රවුසරයට අවසර දී ඇති ශීර්ෂයක් නැවත ලබා දෙනු ඇත. මම අනුමාන කළහොත්, බ්‍රව්සරයට එම පිටුවේ පටවා ඇති වෙනත් වසමකින් අන්තර්ගතය වෙනත් ආකාරයකින් සේවාදායකයට ප්‍රවේශ විය හැකි යැයි මම කියමි.
mjallday

7
One එක් දෙයක් සඳහා “ඉඩ දෙන්න *” අවසර නැති තැන වැඩි ආරක්‍ෂාවක් තිබිය හැකි නමුත් අවසර ශීර්ෂය සඳහා නිශ්චිත හා ගැලපෙන ධාරක නාමයක් ක්‍රියාත්මක වේ. මෙහි උදාහරණයක් ලෙස, ඔබට බලය පැවරීමේ තොරතුරු හරස් වසම යැවීමට අවශ්‍ය නම්, ඔබට "ඉඩ දෙන්න *" භාවිතා කළ නොහැක
TCC

3
මෙය .නිත්‍ය ප්‍රකාශනයක් බැවින් example.org හි කිසියම් අගයක් ලෙස අර්ථකථනය කර තිබේද? කුමන අවස්ථාවකදී, මෙය වැරදියට අභිරුචි උදාහරණයකට ඉඩ දෙයි - org TLD?
stackj

1
නිවැරදි රීජෙක්ස් එකක් විය යුත්තේ (භාවිතා කිරීම ) හෝ (භාවිතා කිරීම ) හෝ (පැන යාම ) "^example\.org$"සමඟ හැකර්වරයෙකුට ඔබේ රීජෙක්ස් හරහා ලිස්සා යා නොහැකි බවට වග බලා ගත යුතු බැවිනිsubdomainexample.org^example.orgevil$examplezorg\.
zeg

27

අජැක්ස් විසින් ඉල්ලා සිටින PHP යෙදුමක් සඳහා මා කළ දේ මෙන්න

$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ආපසු *එවන්න.


21

ඔබ දැනුවත් විය යුතු එක් අවාසියක් තිබේ: ඔබ සීඩීඑන් වෙත ලිපිගොනු ලබාගත් විගසම (හෝ ස්ක්‍රිප්ටින් කිරීමට ඉඩ නොදෙන වෙනත් සේවාදායකයක්) හෝ ඔබේ ලිපිගොනු ප්‍රොක්සියක හැඹිලිගත කර ඇත්නම්, 'සම්භවය' මත පදනම්ව ප්‍රතිචාර වෙනස් කිරීම. ඉල්ලීම් ශීර්ෂය ක්‍රියා නොකරනු ඇත.


4
ඔබට මේ ගැන විස්තාරණය කළ හැකිද, නැතහොත් අපට තවත් තොරතුරු සෙවිය හැකි තැනකට අපව යොමු කළ හැකිද? මම ලයිම්ලයිට් සමඟ එය කිරීමට බලාපොරොත්තු වන අතර, මම හිතන්නේ ඔබ වැරදියි. අපගේ සීඩීඑන් බීජ සේවාදායකයා ශීර්ෂකය යවන තාක් කල්, සීඩීඑන් විසින්ම එය යවන බව අපගේ තාක්ෂණික නිලධාරියෙක් පැවසීය. තවම එය අත්හදා බලා නොමැත
BT

13
හැඹිලි හෝ සීඩීඑන් සැලකිලිමත් වන්නේ නම්, විවිධ ප්‍රභව ඉල්ලීම් ශීර්ෂ අගයන් සඳහා වෙනම ප්‍රතිචාර තබා ගැනීමට හැඹිලිය / සීඩීඑන් වෙත පැවසීමට විචල්‍ය ශීර්ෂය භාවිතා කරන්න. ඔබේ ප්‍රතිචාරයට "විචල්‍ය: සම්භවය" වැනි ශීර්ෂයක් ඇතුළත් වේ. : හැඹිලි / පස්වරුවේදී පහරදී තිබේ එය ශීර්ෂ "සම්භවය සහිත ඉල්ලීමක් එක් ප්රතිචාරයක් යැවීමට යුතු බව දන්නා foo.example.com , සහ ශීර්ෂ" සම්භවය: සමඟ ඉල්ලීමක් වෙනස් ප්රතිචාර " bar.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
මෙය මට වැඩ කළ නමුත් මට '^' එනම් ... SetEnvIf Origin "^ http (s) ?: // (www \.) එකතු කිරීමට සිදු වුවද?
gypsyDev

එය stackoverflow.com/a/14034228/209139 හා සමාන වේ . එය එසේ ය .htaccess සින්ටැක්ස් PHP වලට වඩා කියවීමට අපහසුය. Header set Vary Originමෙම පිළිතුරට හොඳ එකතු කිරීමක් වනු ඇත.
TRIG

1
ඔබගේ උදව්වට බොහෝම ස්තූතියි
සිසිල් පරිපූර්ණවාදියා

2
මට වෙනස් AccessControlAllowOrigin=$0$1වීමට සිදු විය AccessControlAllowOrigin=$0. එසේ නොමැතිනම් එය HTTPS සම්භවය සඳහා ක්‍රියා කළේ නැත. http://example.comනිවැරදිව එළියට ආ නමුත් අවසානයෙහි අමතර කොටසක් සමඟ https://example.comපිටතට පැමිණියේය . https://example.comss
TRiG

18

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";
   }
}

මෙය ප්‍රතිරාවය කරනුයේ ලබා දී ඇති වසම් ලැයිස්තුවට ගැලපෙන "ප්‍රවේශ-පාලනය-ඉඩ දෙන්න-සම්භවය" ශීර්ෂයන් පමණි.


ඩොමේන් 3.com.badhacker.com වෙත ප්‍රවේශ වීමට ඉඩ ඇති බැවින් ඔබ එම රීජෙක්ස් එක \ z සමඟ අගුළු දැමිය යුතු යැයි සිතන්න.
dft

ftdft අපි අර්ථ දක්වන්නේ $ එය අවසානයේ
ඇඩ්‍රියානෝ රෝසා

කණගාටුයි මම සාරාංශ උදාහරණයෙන් අදහස් කළේ, d ඇඩ්‍රියානෝ රෝසාගේ සත්‍ය පෝස්ට් එක කරන්නේ z z
dft


13

යෙස්ටැට්ගුයි වෙතින් ලැබෙන පිළිතුර පදනම් කර ගනිමින් ජාවා වෙබ් යෙදුම සඳහා විසඳුමක් මෙන්න.

මම ජර්සි REST 1.x භාවිතා කරමි

ජර්සි REST සහ CORSResponseFilter ගැන දැනුවත් වීමට web.xml වින්‍යාස කරන්න

 <!-- 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ඔබ සීඩීඑන් (අන්තර්ගත බෙදාහැරීමේ ජාලය) පිටුපස සිටී නම් එය සැකසිය යුතුය .

මගේ Nginx වින්‍යාසයේ අදාළ කොටස:

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.0 හි පරීක්ෂා කර එය ක්‍රියාත්මක නොවන බව තහවුරු කළෙමි).
රික් රියන්ෂේ

7
මෙම CORS පිරිවිතර කොටස 5.1 Access-Control-Allow-Origin Response Headerආරම්භය-ලැයිස්තුව සංශෝධනයට රාජ්යයන්: ඒ වෙනුවට සම්භවයක් සහිත අභ්යවකාශ-වෙන් ලැයිස්තුව ඉඩ වඩා, එය තනි සම්භවය හෝ වැල "ශූන්ය" එක්කෝ වේ.
maxpolk

2
මගේම පිළිතුරක් පිළිබඳ විවරණයක මා සඳහන් කළ පරිදි, එය ක්‍රියාත්මක කරන්නන්ගේ සටහනක කොටසකි, RFC 2119 අවශ්‍යතාවයක් නොවේ. 'නිවැරදි' පිළිතුර නියත වශයෙන්ම අවකාශයෙන් වෙන් කළ අගයන් භාවිතා කිරීමයි. ගැටළුව වන්නේ ක්‍රියාත්මක කිරීම අසම්පූර්ණ වන අතර එබැවින් 'නිවැරදි' පිළිතුර අනිවාර්යයෙන්ම ක්‍රියාත්මක නොවේ. එය කළ යුතුය, නමුත් එසේ නොවේ. කෙසේ වෙතත්, අනාගතයේ දී, ක්‍රියාත්මක කිරීම යහපත් වන විට, මෙය වෙනස් විය හැකිය.
බොබ් අමන්

8

HTTPS ධාවනය වන වසමක් සඳහා මෙය සැකසීමට මම වෙහෙසුණා, එබැවින් මම විසඳුම බෙදාගනු ඇතැයි සිතුවෙමි. මගේ 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 / sites-available / default-ssl වෙත ගොස් එම ගොනුවේ එකම විධානය ඇතුලත් කිරීමට අවශ්‍ය වනු ඇත. පිළිබඳ <VirtualHost _default_:443>කොටස.

වින්‍යාස ගොනු යාවත්කාලීන වූ පසු, ඔබට පහත විධානයන් පර්යන්තය තුළ ක්‍රියාත්මක කිරීමට අවශ්‍ය වනු ඇත:

a2enmod headers
sudo service apache2 reload

මම මෙම විකල්පයට කැමතියි. සමහර විට සේවාදායකයන්ට a2enmod ලබා ගත නොහැක, එබැවින් ඔබ කළ යුත්තේ ඔබේ ප්‍රධාන httpd.conf රේඛාව පරීක්ෂා කර බැලීම පමණි: LoadModule headers_module modules / mod_headers.so රේඛාව අසම්පූර්ණද යන්න.
මයික් කෝර්මන්ඩි

මගේ ^http(s)?://(.+\.)?example\.com(:\d+)?$
ආරම්භයට

8

ExpressJS යෙදුම් සඳහා ඔබට භාවිතා කළ හැකිය:

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

EIvgenNaida ඉතින්? ප්‍රශ්නය කුමක්ද?
eyecatchUp

6

ඔබට අකුරු සම්බන්ධ ගැටලුවක් තිබේ නම්, භාවිතා කරන්න:

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

3

වඩාත් නම්‍යශීලී ප්‍රවේශයක් වන්නේ Apache 2.4 හි ප්‍රකාශන භාවිතා කිරීමයි. ඔබට වසම්, මාර්ග සහ අනෙකුත් සෑම ඉල්ලීම් විචල්‍යයක් සමඟම ගැලපේ. යවන ලද ප්‍රතිචාරය සැමවිටම වුවද, *එය ලැබෙන එකම ඉල්ලුම්කරුවන් කෙසේ හෝ අවශ්‍යතා සපුරාලයි. Originප්‍රකාශනයේ (හෝ වෙනත්) ඉල්ලීම් ශීර්ෂයක් භාවිතා කිරීමෙන් Apache එය ස්වයංක්‍රීයව 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
මම මෙහි පැමිණියේ සමහර බ්‍රව්සර් *පිවිසුම් වැනි අක්තපත්‍ර සමඟ නොපිළිගන්නා බැවිනි . එබැවින් ඔබ ඒ වෙනුවට ගැලපෙන ධාරක නාමය සමත් වුවහොත් වඩා හොඳ වනු ඇත *.
කීටෙල් ඩොග්

E කීටෙල් ඩොග් එක් එක් වසම සඳහා කේතය පුනරාවර්තනය කරනවා වෙනුවට නිවැරදි සම්භවය ග්‍රහණය කර බහුවිධ සම්භවයක් ඇති විට එය ආපසු එවන්නේ කෙසේද? ප්‍රකාශන සමඟ එය කළ හැකි බව පෙනේ, නමුත් ලියකියවිලි මට පැහැදිලි නැත.
වොල්ෆ්

ඇත්ත වශයෙන්ම මගේ සැබෑ ගැටළුව වූයේ සේවාදායකයා මෙම මූලාරම්භයට ඉඩ දෙන්නේ දැයි බැලීමට ශීර්ෂයන් පරික්ෂා කරන පූර්ව ආලෝක ඉල්ලීම Access-Control-Allow-Originසඳහා OPTIONSලාරවෙල් ශීර්ෂය ආපසු නොදෙන බැවිනි . මම එය නිවැරදි කළා. *මට සැබෑ ගැටළුව එසේ නොවීය. එහෙත්, තවමත් සමහර බ්රව්සර පිළිගන්නේ නැහැ *අක්තපත්ර සමග, වෙබ් යෙදුම් හරස් සම්භවය ඉල්ලීම යැවීම විට නිසා, ඔවුන් ද සඳහන් කල යුතු වේ HTTP_ORIGINඔබ විචල්ය සමඟ ගතිකව ප්රවේශ විය හැකි ශීර්ෂ Originදී .htaccessApache සඳහා, හෝ $_SERVER['HTTP_ORIGIN'];PHP හි. කෙසේ වෙතත්, ඔබේ විසඳුම සියලු මූලාරම්භයන්ට ඉඩ දෙන පරිදි හොඳ නමුත් අඩු ආරක්ෂිත වේ
KeitelDOG

නමුත් මතක තබා ගත යුතු කරුණු 2 ක් නම් 1) සැපයීම *සෑම දෙයකටම ඉඩ දෙයි. 2) HOST ORIGIN ට වඩා වෙනස් ය. HOST යනු ශීර්ෂකය ඉල්ලීම සඳහා සම්මත කර ඇති සත්‍ය 'TARGET HOST' ය. නමුත් INITIAL HOSTඉල්ලීම යවන්නේ ORIGIN ය TARGET HOST. එබැවින් ඔබේ කේතය තුළ ORIGIN HOSTනොසලකා හරින අතර කිසි විටෙකත් භාවිතා නොවේ. ඉහත පිළිතුරු බලන්න, ඔවුන් ඒවා ORIGINඑකතු කිරීමට අගයන් භාවිතා කරන ආකාරය ඔබට පෙනෙනු ඇත Access-Control-Allow-Origin.
කීටෙල්ඩෝග්

E කීටෙල් ඩොග් *සෑම කෙනෙකුටම ඉඩ නොදේ, මන්ද Originප්‍රකාශනයේ ඉල්ලීම් ශීර්ෂකය භාවිතා කිරීම අපාචේ විසින් ස්වයංක්‍රීයව Varyප්‍රතිචාර ශීර්ෂයට ඒකාබද්ධ කිරීමට හේතු වේ req_novary('Origin'). බ්‍රව්සර් දන්නා පරිදි ඔවුන්ට වෙනස් ප්‍රතිචාරයක් ලැබිය හැකි අතර Originයවන ලද අගය කෙනෙකුගේ පරීක්ෂණයෙන් සමත් නොවන්නේ නම්, Access-Control-Allow-Originශීර්ෂය කිසි විටෙකත් සකසා නැත.
වොල්ෆ්

3

PHP කේතය:

$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');

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

ASMX සේවාවක් සඳහා බහු වසම් ප්‍රවේශයට පහසුකම් සැපයීම සඳහා, මම මෙම කාර්යය global.asax ගොනුවේ නිර්මාණය කළෙමි:

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

CORS ක්‍රියාපද හැසිරවීමට ද මෙය ඉඩ දෙයි OPTIONS.


2

උප ඩොමේන් ගැලපීම සඳහා PHP කේත උදාහරණය.

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

2

.NET යෙදුම් සඳහා තරමක් පහසු පිටපතක් / පේස්ට් සඳහා, මම මෙය ලිව්වේ global.asaxගොනුවක් තුළ සිට CORS සක්‍රීය කිරීම සඳහා ය . මෙම කේතය දැනට පිළිගත් පිළිතුරේ දී ඇති උපදෙස් අනුගමනය කරයි. මෙය භාවිතා නොකර '*' effectively ලදායී ලෙස සාක්ෂාත් කරගනී.

එයට හේතුව නම්, එය 'සත්‍ය' ලෙස සකසා ඇති 'withCredentials' ගුණාංගය සමඟ AJAX XMLHttpRequest යැවීමේ හැකියාව ඇතුළුව තවත් CORS විශේෂාංග කිහිපයක් සක්‍රීය කිරීමයි .

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

AWS Lambda / API ද්වාරය

සර්වර්ලස් ඒඩබ්ලිව්එස් ලැම්බඩා සහ ඒපීඅයි ගේට්වේ හි බහු මූලාරම්භයන් වින්‍යාසගත කරන්නේ කෙසේද යන්න පිළිබඳ තොරතුරු සඳහා - යමෙකුට දැනෙන දෙයක් සඳහා තරමක් විශාල විසඳුමක් වුවද එය සරල යැයි සිතිය හැකිය - මෙහි බලන්න:

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 වන සබැඳිය බලන්න).


2
Access-Control-Allow-Credentials: trueආදේශක කාඩ්පත සමඟ අවසර නැත Access-Control-Allow-Origin: *. <origin>ඒ වෙනුවට විශේෂිත එකක් සකසන්න .
ටොම්

Om ටොම්, ඔව්, එය එහි තිබුනේ ඇයිදැයි මට විශ්වාස නැත, නමුත් AWS හි එකතු කරන ලද පෙරනිමි වලින් මම එය පිටපත් කර තිබේද? එය පෙන්වා දීමට ස්තූතියි.
timhc22

1

ජැන්ගෝ හි තවත් එක් පිළිතුරක්. තනි දර්ශනයක් ලබා ගැනීම සඳහා බහු වසම් වලින් CORS ට ඉඩ දෙන්න, මෙන්න මගේ කේතය:

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

0

එස්එස්එල් සහ ආර්එෆ්සී හි ව්‍යාකරණ හරහා දැන්වීම් සැපයීම පිළිබඳ ගූගල්ගේ සහාය පිළිතුරෙන් ඔබට URL වල අවකාශය සීමා කළ හැකි බව පෙනේ. විවිධ බ්‍රව්සර් වල මෙය කෙතරම් හොඳින් සහාය වේදැයි විශ්වාස නැත.


සටහනක් එක් කරන w3.org/TR/cors/#access-control-allow-origin-response-header පිරිවිතරයට ' එස්එස්එල් හරහා දැන්වීම් සැපයීම' , "ප්‍රායෝගිකව මූලාරම්භක-ලැයිස්තුව හෝ ශුන්‍ය නිෂ්පාදනය වඩාත් සීමා කර ඇත අවකාශයෙන් වෙන් වූ මූලාරම්භක ලැයිස්තුවකට ඉඩ දෙනවා වෙනුවට, එය එක් ප්‍රභවයක් හෝ “ශූන්‍ය”
නූලකි

එම විස්තරය සටහන් කිරීම වැදගත් වන අතර, පිරිවිතරයක් “ප්‍රායෝගිකව” යැයි පැවසූ විට, එය වලංගු බව එයින් අදහස් නොකෙරේ. එයින් අදහස් වන්නේ ඔබ එය එසේ කරන්නේ නම්, ඔබට ගැටළු ඇතිවිය හැකි බැවින් ක්‍රියාත්මක කරන්නන්ගෙන් බහුතරයක් පිරිවිතර වැරදි ලෙස හෝ අසම්පූර්ණ ලෙස ක්‍රියාත්මක කරන බැවිනි. පිරිවිතර මඟින් අවකාශය වෙන් කරන ලද මූලාරම්භ ලැයිස්තුවක් ලබා ගත හැකි අතර, ඔබට මෙහි EBNF හි දැකිය හැකිය origin-list: tools.ietf.org/html/rfc6454#section-7.1
බොබ් අමන්

0

CORS භාවිතයෙන් එය ක්‍රියාත්මක කිරීම සඳහා ඔබ මා වැනි කේත උදාහරණ බොහොමයක් උත්සාහ කළහොත්, ඔබේ හැඹිලිය සත්‍ය වශයෙන්ම ක්‍රියාත්මක වන්නේ දැයි බැලීමට පළමුව එය ඉවත් කළ යුතු බව සඳහන් කිරීම වටී, පැරණි පින්තූර තවමත් පවතින විට වැනි ගැටළු වලට සමාන වේ. සේවාදායකයේ මකාදමා ඇත (මන්ද එය තවමත් ඔබගේ හැඹිලියේ සුරකින බැවිනි).

උදාහරණයක් වශයෙන් CTRL + SHIFT + DELඔබගේ හැඹිලිය මකා දැමීමට Google Chrome හි .

පිරිසිදු .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

පහත පිළිතුර C # සඳහා විශේෂිත වේ, නමුත් සංකල්පය විවිධ වේදිකාවලට අදාළ විය යුතුය.

වෙබ් api එකකින් හරස් ප්‍රභව ඉල්ලීම් වලට ඉඩ දීම සඳහා, ඔබ ඔබේ යෙදුමට විකල්ප ඉල්ලීම් වලට ඉඩ දිය යුතු අතර පාලක මට්ටමින් පහත දැක්වෙන විවරණ එකතු කරන්න.

[EnableCors (UrlString, Header, Method)] දැන් මූලාරම්භය සම්මත කළ හැක්කේ නූල් ලෙස පමණි. SO ඔබට ඉල්ලීමෙහි එක් URL එකකට වඩා ලබා දීමට අවශ්‍ය නම් එය කොමාවකින් වෙන් කළ අගයක් ලෙස සම්මත කරන්න.

UrlString = " https: //a.hello.com,https: //b.hello.com "


0

ප්‍රවේශ-පාලනය-ඉඩ දෙන්න-සම්භවය ශීර්ෂය සඳහා එක් ප්‍රභවයක් පමණක් නියම කළ හැකිය. නමුත් ඉල්ලීම අනුව ඔබේ ප්‍රතිචාරයේ මූලාරම්භය සැකසිය හැකිය. Vary ශීර්ෂකය සැකසීමටද අමතක නොකරන්න. PHP හි මම පහත සඳහන් දේ කරමි.

    /**
     * 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
  }

-3

Asp.net යෙදුම සඳහා අපට මෙය Global.asax ගොනුවේ සැකසිය හැකිය.

protected void Application_BeginRequest(object sender, EventArgs e)
    {

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

    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.