是否有一种方法允许多个跨域使用Access-Control-Allow-Origin头?
我知道*,但它太开放了。我只讲几个域。
举个例子,是这样的:
Access-Control-Allow-Origin: http://domain1.example, http://domain2.example
我已经尝试了上面的代码,但它似乎不能在Firefox中工作。
是否可以指定多个域,还是只能指定一个域?
是否有一种方法允许多个跨域使用Access-Control-Allow-Origin头?
我知道*,但它太开放了。我只讲几个域。
举个例子,是这样的:
Access-Control-Allow-Origin: http://domain1.example, http://domain2.example
我已经尝试了上面的代码,但它似乎不能在Firefox中工作。
是否可以指定多个域,还是只能指定一个域?
当前回答
如果你使用字体有困难,可以使用:
<FilesMatch "\.(ttf|ttc|otf|eot|woff)$">
<IfModule mod_headers>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>
其他回答
对于安装了URL重写2.0模块的iis7.5 +,请参阅此SO答案
为了方便ASMX服务的多域访问,我在全局中创建了这个函数。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动词。
谷歌对通过SSL服务广告的支持回答和RFC本身的语法似乎表明您可以用空格分隔url。不知道这在不同的浏览器中有多受支持。
下面的答案是针对c#的,但是这个概念应该适用于所有不同的平台。
为了允许来自web api的跨源请求,你需要允许应用程序的选项请求,并在控制器级别添加下面的注释。
[EnableCors UrlString、头、方法) 现在原点只能传递一个s字符串。因此,如果你想在请求中传递多个URL,请以逗号分隔。
UrlString = https://a.hello.com, https://b.hello.com”
我在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");
}