【发布时间】:2017-11-18 16:58:15
【问题描述】:
我刚刚了解了 WebAPI 中的同源策略。启用 CORS 有助于调用存在于不同域中的 Web 服务。
我的理解是不启用 CORS 只会确保无法从浏览器调用 web 服务。但是如果我不能从浏览器调用它,我仍然可以使用不同的方式调用它,例如提琴手。
所以我想知道这个功能有什么用。你能放一些光吗?如果这是一个微不足道或愚蠢的问题,我们深表歉意。
感谢和问候, 阿比吉特
【问题讨论】:
我刚刚了解了 WebAPI 中的同源策略。启用 CORS 有助于调用存在于不同域中的 Web 服务。
我的理解是不启用 CORS 只会确保无法从浏览器调用 web 服务。但是如果我不能从浏览器调用它,我仍然可以使用不同的方式调用它,例如提琴手。
所以我想知道这个功能有什么用。你能放一些光吗?如果这是一个微不足道或愚蠢的问题,我们深表歉意。
感谢和问候, 阿比吉特
【问题讨论】:
这根本不是一个愚蠢的问题,当您处理不同来源的 Web 服务时,这是一个非常重要的方面。
要了解什么是 CORS(跨域资源共享),我们必须从所谓的同源策略开始,它是一个网络安全概念。听起来很复杂,但仅确保 Web 浏览器允许包含在网页中的脚本访问另一个网页上的数据,但前提是两个网页具有相同的来源。换句话说,数据请求必须来自相同的方案、主机名和端口。如果http://player.example 尝试向http://content.example 请求数据,通常会失败。
再看一遍后,很明显这可以防止未经授权的数据泄露到第三方服务器。如果没有此策略,脚本可以读取、使用和转发托管在任何网页上的数据。这种跨域活动可能被用来利用 cookie 和身份验证数据。因此,这种安全机制是肯定需要的。
如果您想将内容存储在与播放器请求不同的来源,有一种解决方案 - CORS。在 XMLHttpRequests 的上下文中,它定义了一组标头,允许浏览器和服务器通信允许/禁止哪些请求。它是 W3C 的推荐标准。实际上,对于 CORS 请求,服务器只需要在其响应中添加以下标头:
Access-Control-Allow-Origin: *
有关设置(例如 GET/POST、自定义标头、身份验证等)和示例的更多信息,请参阅http://enable-cors.org。
如需详细阅读,请使用https://developer.mozilla.org/en/docs/Web/HTTP/Access_control_CORS
【讨论】: