Access-Control-Allow-Origin 如何设置多个值呢

需求就是多个网站请求同一个api服务器
和这里一样https://segmentfault.com/q/10...

我不是做后端的,但是我们后端不知道怎么设置,
在web.config里设置了一下

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://a.com"/>
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS"/>
<add name="Access-Control-Allow-Headers" value="Content-Type"/>
</customHeaders>
</httpProtocol>
</system.webServer>

这里只能设置一个域名,不能设置多个。
然后如果用程序判断实现的话,该怎么做呢?

阅读 14.5k
3 个回答

我来自己写一下答案,以给后来的朋友一点思路和建议:
1,首先把Access-Control-Allow-Origin设置成*是不妥的,自己的接口服务器不能允许所有人都可以访问。
2,具体哪里可以设置Access-Control-Allow-Origin呢,

a,web.config中可以设置;

b,需要在IIS服务器站点的功能视图中设置HTTP响应标头;
(a,b可以参考:http://www.th7.cn/Program/net...

c,通过nginx代理服务器进行设置;

d,修改接口api,在每个api上添加响应头;https://docs.microsoft.com/en...

e,拦截器方式(是d的一种封装)http://ask.csdn.net/questions...http://stackoverflow.com/ques...

ab只能设置一个域名或*,
c需要更多知识背景,配置更多环境,相对windows Server来说不太适合
d,是微软给出的最终解决方案,但是不是最佳方案,
e是对d的一种封装,写一个拦截器,应用到所有控制器上,在拦截器里控制来访域名,动态设置Access-Control-Allow-Origin的值.

根据自己情况选择合适的解决方案,这里我选择了e方案

服务器可以根据需求动态返回响应头,不要这样写死。

解决跨域问题
使用过

<meta http-equiv="Access-Control-Allow-Origin" content="*">

还有这php里是

header('Access-Control-Allow-Origin:*');

那么你的value值换成*,应该就可以了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进