我对网络开发还很陌生。
最近我遇到了一个术语,叫做
CORS
(跨源资源共享)。
我的理解是: 假设我在浏览器中访问一个名为
www.example.com
的网站。所提供的页面中嵌入了 JavaScript。如果嵌入式 JavaScript 正在向位于不同域中的另一个站点发送请求(比如说:abc.com
),那么该请求是否会被浏览器阻止?
或者请求发送至 abc.com;但 abc.com 服务器向浏览器发送“NO”;然后浏览器告诉用户不允许向 abc.com 发出请求。
我读了几个答案,并对以上两种说法哪一个是正确的感到困惑。
如果第二个说法正确,那么浏览器与CORS无关;因为它仍然将跨源请求发送到其他域 Web 服务器。所以 CORS 责任 100% 在于 Web 服务器。
而且我还了解后端服务器从
origin
http 标头字段标识域。因此,只要有前端工具与服务器(如浏览器)进行通信,其中标头由工具填充,CORS 就会出现。
如果通信仅通过 API 调用进行(例如:使用编程语言库),则根本不存在 CORS 风险。 举例来说:如果我使用 CURL,则不会填充
origin
http 标头字段;所以服务器无法识别请求来自哪里。因此,CORS 不在本次通信中。我这里说得对吗?
跨源限制完全由浏览器管理。这意味着如果您在终端上构建 HTTP 客户端,它可以完全忽略 CORS。
但是,服务器是一个组件。 CORS 有效工作的方式是浏览器询问服务器:“你允许我发出这个请求吗”。如果服务器说“不”,客户端将阻止该请求。
GET
请求还有一些额外的细微差别,但总结是服务器通知浏览器允许什么,并且浏览器强制该策略。