You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何浏览器扩展使用fetch无需跨域权限,而XMLHttpRequest却需要?

为什么Chrome扩展中XMLHttpRequest和fetch的跨域权限要求不同?这是Bug吗?

这绝对不是Bug,而是Chrome扩展平台针对新旧API设计的权限模型差异,背后是有明确考量的:

  • XMLHttpRequest(XHR)的历史遗留规则
    XHR是比较早期的网络请求API,Chrome扩展的权限体系最初就是围绕它构建的。为了让用户清晰知晓扩展的网络访问范围,同时遵循早期的同源策略扩展逻辑,XHR要求必须在manifest.json中显式声明<all_urls>或特定域名权限,才能发起跨域请求。这是为了保持对旧版扩展代码的兼容性,避免突然改变规则导致大量现有扩展失效。

  • fetch API的现代权限优化
    fetch作为现代Web标准的新API,Chrome团队在扩展中支持它时,采用了更灵活的特权上下文权限模型。在扩展的特权环境(比如后台Service Worker、弹出页面)中,fetch默认拥有跨域请求能力,无需在manifest中额外配置权限。这是为了简化现代扩展的开发流程,让开发者能更顺畅地使用新API,同时扩展的特权上下文本身就处于受信任的环境中,Chrome已经通过其他机制(比如扩展审核)把控风险。

补充个细节:如果是在内容脚本里,不管用XHR还是fetch,都会受到同源策略限制,必须在manifest中配置对应权限或者目标服务器支持CORS才能跨域请求——这部分两者的规则是一致的。

内容的提问来源于stack exchange,提问作者timche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:26:27