本地React应用与浏览器插件的CORS请求差异疑问
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com/crumbIssuer/api/json. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 403.
核心原因很直接:CORS是浏览器针对网页脚本的安全限制,而浏览器插件拥有更高权限,不受普通网页的同源策略约束,具体细节如下:
同源策略只管控网页脚本
浏览器的同源策略专门限制网页内运行的JavaScript代码(比如你的React应用)跨域请求资源,目的是防止恶意网站窃取其他站点的数据。你的React应用在网页环境中运行,属于被管控的对象,因此跨域请求必须要求服务器返回Access-Control-Allow-Origin这类CORS响应头,否则浏览器会直接拦截响应并抛出你看到的错误。浏览器插件拥有特殊权限
像RESTED这类工具属于浏览器扩展程序,安装时会申请跨域访问权限(你安装插件时应该能看到类似“访问所有网站的数据”的权限提示)。一旦获得授权,插件发起的请求就不受普通网页的同源策略限制,浏览器不会对这些请求做CORS校验,自然不会触发错误。请求的运行环境完全不同
网页脚本的请求是在当前页面的上下文中发起的,而插件的请求是在插件自身独立的安全上下文里运行的,两者的安全隔离级别不同。浏览器对插件的信任度更高,允许它绕过普通网页的CORS限制——毕竟这类插件的核心功能就是调试跨域请求,没有这个权限根本无法正常工作。
内容的提问来源于stack exchange,提问作者YTKme

