原文地址:https://javascript.info/fetch-crossorigin

现代JavaScript教程 (2).png如果我们是发起到另一个网站的请求,那么请求可能会失败。

例如,我们尝试请求 http://example.com 这个地址:

  1. try {
  2. await fetch('http://example.com');
  3. } catch(err) {
  4. alert(err); // Failed to fetch
  5. }

跟预期的一样,请求失败了。

这里的核心概念是源(Origin):由 协议、域名、端口三部分组成。

跨域请求(发送到另一个域(或是子域)、协议或端口的请求)需要来自远程端的特殊标头支持。

该策略称为“ CORS”:是 Cross-Origin Resource Sharing(跨域资源共享)的简写。

一段简史:为什么需要 CORS

CORS 的存在是为了保护互联网免受恶意黑客的攻击。

我们做一个非常简短的历史回溯。

很久以前,一个站点的脚本是无法访问另一站点内容的。

这个简单而强大的规则是互联网安全的基础。例如,来自 hacker.com 网站的恶意脚本无法访问 gmail.com 网站上的用户邮箱,这样用户会感觉安全。

当时,JS 还没有任何特殊的方法来执行网络请求,它只是用来装饰网页的一种玩具语言。但是 Web 开发人员需要更多功能,于是发明了各种技巧来解决该限制向其他网站发出请求。

使用表单

与另一台服务器通信的一种方法是在那里提交

。 人们可以在停留在当前页面,然后提交请求到