我开发了一个客户端和一个服务器应用程序。在服务器的Web.config中,我设置了属性
<add name="Access-Control-Allow-Origin" value="http://domain.tld:4031" />
事实上,当我尝试与安装在不同位置的客户端连接时,我被拒绝了。但是,当我在同一个位置使用Chrome的高级REST客户端时,我不会被拒绝! 在扩展中,响应的标题指示
Access-Control-Allow-Origin: http://www.domain.tld:4031
那么为什么我仍然得到一个答案“200 OK”,以及我要求的数据?
更新: 我不认为这个主题足够答案:How does Google Chrome's Advanced REST client make cross domain POST requests?
我主要担心的是:怎么可能“询问”这些额外的权限。我认为不应该允许客户只决定它收到的权限。我认为这只取决于服务器。如果我只是“要求”获取访问您计算机上数据的额外权限,该怎么办?这对我来说没有意义......
答案 0 :(得分:0)
REST客户端(或实际上是浏览器)能够绕过CORS限制的原因是它是客户端保护。提供此保护不是服务器的责任,但它是大多数现代浏览器供应商实施的功能,以保护其用户免受XSS危害。
来自维基百科CORS页面的以下引用总结得相当不错
“尽管服务器可以执行某些验证和授权,但浏览器通常负责支持这些标头并尊重它们所施加的限制。” - Wikipedia
当然,就像报价所强加的那样,你可以自己做一些服务器端验证。然而,“Access-Control-Allow-Origin”标题更多地表示浏览器可以允许浏览器允许指定的来源。然后由浏览器决定是否要尊重此标题。在例如chrome的先前版本中,实际上存在一个标志来一起关闭相同的原始策略。