最近在做一个服务集成的项目,需要将一个第三方的日志服务系统直接接入我们现有的日志系统中,第三方服务支持Bearer授权访问,故
最后解决方案是前端直接调用第三方服务获取数据。但是遇到了鉴权的问题, 最后获知是Origin
导致的
经查询资料, Origin是Referer头的升级版, 常用于CORS或者非GET
、HEAD
请求(MDN 的说法有误,不是只有 POST
)相关的服务端身份检验
个人觉得,这个 Origin 头绝大部分都用于 CORS
浏览器端
Origin
无法手动设置
Origin
头是浏览器保护字段,类似的有 Referer
、Host
、Content-Length
、Keep-alive
等,但是可以通过 nginx 代理修改。浏览器根据约定自动附加浏览器附加
Origin
头的规则
get
,head
请求时都会自动附加。不可被编程,不可被编辑。get
,head
请求由于兼容性,故无法实现非 CORS 情况下,
Origin
字段框架使用情况
所有符合规则的资源都会包含 Origin 头?
浏览器执行 CORS(跨域请求)时都会发送一个options
请求,获取服务端是否允许跨域的参数。这是为了安全性考虑的。有些情况我们无法控制服务端的行为,故只能想办法绕过验证。
本地开发: 使用node-http-proxy代理服务请求
生产/本地开发: 使用 nginx 代理服务, 例如
location ~ ^\/(scholar_complete)\/* {
proxy_pass https://scholar.google.com/;
}
这会将所有/scholar_complete
开头的请求转发到 Google Scholar(谷歌学术)。