跨域——浏览器同源策略的限制
理解跨域,首先需要理解同源策略 (Same origin policy)
。
何为源?
如图所示,Scheme + Domain Name + Port
所组成的部分被浏览器视为源
,显然 https://www.baidu.com:80 和 https://www.jd.com:80 就不是同一个源,两者之间的Domain Name发生了变化
简而言之,(协议、域名、端口)其中任意一项发生了变化,那么对于浏览器而言,会被视为跨源。
为什么需要同源策略?
因为浏览器有浏览器缓存,被人们所熟知的有:cookies、local storage、session storage等,这些信息是用户与源之间的敏感数据,没有SOP同源策略,任何网页都可以访问其他页面的DOM。这将使其能够在未经用户同意的情况下从另一个网页访问潜在的敏感数据,并在其他网页上执行操作。为了避免恶意网站未经许可访问用户的敏感数据,Netscape
Mozilla基金会前身提出了同源策略,如今已经成为浏览器中重要的安全机制之一。
由于浏览器的同源策略,禁止了跨来源资源共享(Cross-Origin Resource Sharing)
。
在不同源
之间跳转访问,就会被浏览器视为跨域请求:
跨域请求发出 → 目标服务器返回响应 → 浏览器检查响应头Headers(如果未包含Access-Control-Allow-Origin
,浏览器会拦截前端脚本访问响应内容)
显然,很多情况下的跨来源资源共享(跨域请求)
是必要的,那么就需要目标服务器允许CORS(注意:CORS是对于浏览器的限制,服务器之间不存在CORS限制)。