我试图理解CORS。根据我的理解,它使您能够限制哪些域可以访问服务器上的资源。然而,这似乎并不是故事的全部。例如,我有一个未启用 CORS 的 Web 服务。我无法通过 jQuery 从我的 Web 应用程序访问此 Web 服务(该应用程序在本地主机上运行)。不过,我可以通过 Postman 访问网络服务。所以,我有点困惑。是否有一些额外的客户端工作涉及 CORS?
服务器负责报告允许的来源。 Web 浏览器负责强制请求仅从允许的域发送。
CORS应用于请求时来源标头包含在请求中。这包括来自 JavaScript 的请求和 POST 请求。它没有应用所有资源。来源是发出请求的协议、主机和端口。 JavaScript 发出的请求使用加载 JavaScript 的源,而不是加载 JavaScript 的源。
当 CORS 未启用时,浏览器将依赖同源政策。同源策略仅适用于脚本。浏览器只允许从与加载的页面相同的源加载脚本。当未明确允许来源时,假定采用同源策略。
浏览器以外的 HTTP 客户端不会使用同源策略或 CORS。从这些其他 HTTP 客户端发出的请求没有来源。除非 Postman 桌面应用程序模拟浏览器,否则它将能够向任何 URL 发出请求。
需要 CORS 和同源策略,因为浏览器不会隐式信任其访问的网站向其他网站发出请求。它们不保护源站点,而是保护接收跨源请求的站点。这就是为什么允许的来源取决于目标服务器。
如果没有这些策略,重复加载网站的简单脚本可能会通过广告网络或脚本注入进行分发,然后加载该脚本的任何浏览器都会导致网站上的拒绝服务攻击。通过 CORS 和同源策略,浏览器将限制此脚本的影响。
CORS 提供的另一个重要保护是防止跨站请求伪造。它阻止一个站点向另一个站点发出某些类型的请求。这些请求将使用任何先前创建的令牌(例如会话令牌)发出。
CORS 举例:
Web 浏览器加载页面www.example.com
。该页面包含一个脚本,该脚本发出请求www.example.org
。请求的来源是www.example.com
。浏览器要么发出请求,要么发送一个OPTIONS
首先请求(预检请求)。当服务器在www.example.org
收到来自其他来源的请求www.example.org
它以响应标头进行响应Access-Control-Allow-Origin
它告诉浏览器允许发出请求的来源。它还可能响应其他标头,例如Access-Control-Allow-Methods
and Access-Control-Allow-Headers
可以限制允许的请求类型。当浏览器被告知允许哪些来源时,它将阻止来自不允许的来源的未来请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)