无论如何,我只是需要一个标题。最近我一直在处理大家最喜欢的网络安全功能,我总觉得这是一个应该写点东西的信号,因为这就是写博客的意义所在。
CORS 的主要问题是 开发人员不了解 CORS。它的基本概念应该是很容易的:不要跨域运行代码。这意味着如果我在 css-tricks.com
尝试从外部 URL(如 any-other-website.com
)获取一些 JavaScript 代码,浏览器默认情况下会停止它。您将在控制台中看到一个错误。不允许。
除非,当然,另一个网站发送一个 头信息,专门允许这样做。我的域名可以被列入白名单,或者可能有一个通配符允许它。这里有更多细节(比如预检和凭据),而且,一如既往,MDN 文章在这方面做得很好。
我过去总是会感到抓狂,因为 CORS 似乎表现不一致。两个请求会通过,第三个会失败,这似乎无法解释,但却是可重现的。(也许有一个负载均衡器参与了,包含半缓存的头信息?谁知道呢。)或者我正在尝试使用 代理,而代理停止工作。我甚至不记得所有例子,但我敢肯定,我一生中已经参加过超过 100 次关于调试 CORS 问题的会议了。
无论如何,最近 CORS 再次出现在我眼前
- 这个视频,6 分钟内学习 CORS,有 10,000 个赞,似乎引起了人们的共鸣。一个非讽刺的
npm install cors
是这里的解决方案。 - 您必须明确地告诉服务器设置正确的头信息。因此,类似于上面的视频,我必须在 关于 Cloudflare Workers 的视频 中这样做,在那里我使用了跨域(但您并不必须这样做,这实际上是 Cloudflare Workers 的一个非常酷的功能)。
- Jake 的文章 “如何赢得 CORS 比赛”,其中包括一个 游乐场。
- 有一些浏览器扩展(比如 Firefox 和 Chrome 的扩展)可以为您拉取 CORS 头信息,这感觉像是可疑的变通方法,但我不会责怪任何人开发时使用它。
- 我写过一篇关于 代理...任何东西有多么容易,包括一个第三方 JavaScript 文件,并将其设为第一方。很多人都指出 评论中,这样做会完全删除您从 CORS 获得的保护,这非常危险。同意,除非您完全控制那个第三方,否则它非常危险。
CORS 不止这些。它只是网络安全的一个组成部分。
和往常一样,Jake 和 Surma 制作了一集关于这个主题的节目
[https://www.youtube.com/watch?v=vfAHa5GBLio](跨域获取)
嘿,不是这样吗?
您的网站 (css-tricks.com) 向浏览器发送一个头信息,表示可以从另一个域 (any-other-website.com) 加载资源。
您这样描述:“除非,当然,另一个网站发送一个头信息,专门允许这样做。”让人误以为是另一个网站在控制。