为何浏览器扩展使用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
相关产品推荐
相关产品推荐

