什么是CORS?

当涉及到HTTP时,一个由URL的几个不同方面定义。如前一篇文章所述,源由以下内容组成:

  • 协议(例如httphttps
  • 主机名(例如30secondsofcode.org
  • 端口(例如803000

只要这三个方面全部匹配,浏览器就认为这两个URL是同源的。如果其中任何一个方面不同,浏览器就认为这两个URL是跨源的。看一些不同源的示例可能会有帮助:

  • http://30secondsofcode.orghttps://www.30secondsofcode.org(不同的协议)
  • http://www.30secondsofcode.orghttp://dev.30secondsofcode.org(不同的主机名)
  • https://30secondsofcode.orghttps://30secondsofcode.org:3000(不同的端口)

还需要注意的是路径(主机名之后的所有内容)不是源的一部分。这意味着https://30secondsofcode.orghttps://30secondsofcode.org/articles被认为是同源的。

当提到CORS(跨源资源共享)时,通常是在同源策略的上下文中,这是浏览器实施的一项安全功能。它阻止网页进行跨源请求,以防止恶意网站对其他域上的敏感资源进行未经授权的请求。

由于这可能非常限制性,CORS允许服务器指定哪些其他域名可以请求其资源。这是通过使用CORS头部来实现的,请求中的Origin和响应中的Access-Control-Allow-Origin。这样,例如,API服务器可以允许来自特定网页的请求,同时阻止来自其他域的请求。