浏览器最新同源策略分析
同源和同域的区别
在前后端开发中,同源(Same Origin)和同域(Same Domain)都是指网页安全的相关概念,但具体含义不同。
同源是指两个 URL 的协议、主机名和端口号都相同,这意味着两个 URL 具有相同的“源”。
不同源:www.baidu.com, talent.baidu.com
同域则是指两个 URL 的主机名相同,即它们都属于同一个域名。同域并不涉及端口号和协议的限制,这意味着两个具有相同主机名的 URL 可以共享 Cookie、localStorage 和 IndexedDB 等数据。
不同域:baidu.com, bilibili.com
所以说,同域不一定同源
最新浏览器策略
现在一些主流浏览器的最新版本对于不同源和不同域的安全问题都进行了较高级别的设置,因此我们通常会遇到在一些接口调试工具(Postman)和浏览器中发请求时不一样的报错情况。加下了我根据自己在实践中遇到的一些问题来分析一下:
- 同域名,不同端口:这个应该场景比较常见了,本地开发基本都是这个场景,如localhost:8080和loaclhost:8081。这是不用源的,彼此的cookie,localstorage等数据无法共享,需要在请求中设置withCredentials为true(注意,CORS中的Access-Control-Allow-Origin不能为*的问题,所以谁发来的就设置谁为白名单)
- 不同域名:这个在真实场景的前后端分离,或者局域网开发的情况下会遇到,这个安全策略级别非常高,如果测试环境下使用http协议,是完全无法做到cookie共享的,需要换成https协议。我们在使用接口调试工具和浏览器下会遇到不同的安全问题,所以遇到这个情况,直接换一种鉴权方案,如jwt方案等。
跨域到底是个什么东西?
说句实话,我觉得这个名字就取得有问题,我们来看看跨域对应的英文CORS是啥。
跨域设置CORS(Cross-Origin Resource Sharing)简称跨域访问。
一目了然,跨域明明是不同源好吧,并不是不同域名,所以这个名字就很让人误解。所以跨域也被叫做同源策略。