跳转至

CORS: 为啥你的 fetch 块不工作?

任何人在使用类似“Fetch”、“HTTP”、“网络”等扩展时都会被服务器发现,他们在尝试访问某些网站时,即便点击了“允许”,块也不起作用:

造成这种情况的原因被称为跨域资源共享(CORS),这是一种限制网站交互方式的安全功能。

什么是 CORS ?

跨源资源共享(Cross-Origin Resource Sharing),在这里我们不会深入探讨其内部细节——有专门的文档对此进行了详细介绍。CORS 所解决的核心问题很容易理解:

  • 有些网站希望阻止其他网站的访问
  • 而其他网站则希望允许其他网站进行访问

想象一下,如果你访问的任何网站都能像你本人一样访问你的银行网站,那太几把恐怖了!但有时这样的访问并非问题,甚至是有意为之。Scratch 的部分 API 支持跨域资源共享(CORS),这就是 TurboWarp 从 Scratch 加载在线作品的方式。

CORS 是一种网站用于声明是否允许其他网站访问其内容的方式。默认情况下,访问是被禁止的。这个网站必须选择启用 CORS,这样其他网站才能访问它们。如果网站禁用了 CORS,您的浏览器将会给 TurboWarp 一个非常笼统的“网络错误”提示。

怎么修复你的块?

它取决于 URL 的用途。

  • 使用其他功能类似的 URL: 如果该 URL 仅用于托管静态文件,那么请寻找支持直接下载和跨域资源共享功能的其他主机。如果某个 API 不支持跨域资源共享功能,那就查看其竞争对手的 API 是否支持 CORS。
  • 使用跨域资源共享代理: 与其让浏览器直接访问网站,您也可以让另一个服务器(称为 CORS 代理)代替您访问该网站,并返回允许 CORS 的响应。您可以在网上找到许多公开的 CORS 代理,但它们往往活不久,因为运营它们的成本很高,而且经常被滥用。CORS 代理还会监视您作品中的网络请求,并可能对其进行篡改,造成问题。注意,TurboWarp 目前并未运行自己的 CORS 代理。
  • 使用 TurboWarp 桌面版: TW 的桌面应用程序有一个可选功能,能够绕过跨域资源共享(CORS)限制。详情如下:

桌面应用

TurboWarp 桌面版中,有一个选项可以绕过跨域资源共享(CORS)限制,从而允许访问任何网站。出于安全考虑,默认情况下该选项是禁用的,以爆炸与普通浏览器保持一致。在左上角的“设置”按钮下方打开“桌面设置”(在较旧版本中,桌面设置位于右上角的“?”按钮下方):

当桌面设置窗口打开时,请勾选“允许扩展访问任何网站”这一选项。

打包好的作品

在浏览器中运行的打包作品与任何其他网站一样,都受到相同的限制。

那些被打包成 Electron 应用程序的作品默认情况下会绕过跨域资源共享机制,这与桌面应用程序中的设置类似。

如果你正在运行一个服务器

如果您希望其他网站能够访问您的网站,请在您希望公开的每个响应中设置“Access-Control-Allow-Origin”标头为“*”。如果您搜索您正在使用的网络服务器或框架的名称并加上“CORS”,应该能找到很多示例。