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

2017-04-06 10:23:04c#, asp.net问题

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

我不是做后端的,但是我们后端不知道怎么设置,
在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>

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

网友回答:

  • jsoncode jsoncode 2017-4-6 10:53 回复:
    已被采纳

我来自己写一下答案,以给后来的朋友一点思路和建议:
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方案


  • 张亚涛 张亚涛 2017-4-6 10:26 回复:

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

    • jsoncode jsoncode 2017-4-6 10:27 回复:张亚涛
      接口 有很多,该在什么地方添加这个响应头呢?

  • 周抱抱 周抱抱 2017-4-6 10:28 回复:

    解决跨域问题
    使用过

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

还有这php里是

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

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

  • jsoncode jsoncode 2017-4-6 10:30 回复:周抱抱
    第一种是对于html设置的,第二种是php的(php的我也会点),我们的程序是asp.net的,完全懵逼,还在windowsserver上。我们后端都不知道怎么加

  • 周抱抱 周抱抱 2017-4-6 10:34 回复:周抱抱

    在web.config文件里配置
    <system.webServer>
    <httpProtocol>

<customHeaders> 
  <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/> 
  <add name="Access-Control-Allow-Headers" value="x-requested-with"/> 
  <add name="Access-Control-Allow-Origin" value="*" /> 
</customHeaders> 

</httpProtocol>
</system.webServer>

  • 周抱抱 周抱抱 2017-4-6 10:35 回复:周抱抱

    查了一下 貌似我没说错?  
    原理都是一样的。解决跨域问题,跟语言都没关系

  • jsoncode jsoncode 2017-4-6 10:58 回复:周抱抱
    没错,我也是这样设置的,只不过,只能设置一个域名,星是肯定不能设置的

  • 周抱抱 周抱抱 2017-4-6 11:03 回复:周抱抱

    嗯嗯 看到你的回答 受教了。已收藏

  • jsoncode jsoncode 2017-4-6 11:11 回复:周抱抱
    还是很感谢你,这么及时的给出答案,我也是在你的基础上整理的,多些