Chrome的高级REST客户端不介意CORS限制,如何?

时间:2015-10-20 08:23:25

标签: asp.net ajax cors

我开发了一个客户端和一个服务器应用程序。在服务器的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?

我主要担心的是:怎么可能“询问”这些额外的权限。我认为不应该允许客户只决定它收到的权限。我认为这只取决于服务器。如果我只是“要求”获取访问您计算机上数据的额外权限,该怎么办?这对我来说没有意义......

1 个答案:

答案 0 :(得分:0)

REST客户端(或实际上是浏览器)能够绕过CORS限制的原因是它是客户端保护。提供此保护不是服务器的责任,但它是大多数现代浏览器供应商实施的功能,以保护其用户免受XSS危害。

来自维基百科CORS页面的以下引用总结得相当不错

  

“尽管服务器可以执行某些验证和授权,但浏览器通常负责支持这些标头并尊重它们所施加的限制。” - Wikipedia

当然,就像报价所强加的那样,你可以自己做一些服务器端验证。然而,“Access-Control-Allow-Origin”标题更多地表示浏览器可以允许浏览器允许指定的来源。然后由浏览器决定是否要尊重此标题。在例如chrome的先前版本中,实际上存在一个标志来一起关闭相同的原始策略。