一:前言
Javascript可以操作html,发出请求,也可以用iframe加载别的网站。
为了防止当前登陆的网站去访问另一个已登录网站的信息,控制这个请求成功与否就叫同源策略
同源策略明确规定:不同域的客户端脚本在没明确授权的情况下,不能读写对方的资源
如何判断是同源:协议相同+域名相同+端口相同
注:www.example.com和 example.com也不是同一个域名,因为在设置dns解析的时候,可以把这个两个域名设置为不同的IP地址。
二:禁止跨源
如果在浏览器中使用fetch("https://example.com")跨源访问其他网站,则会报错(原因:CORS 头缺少 'Access-Control-Allow-Origin')
三:跨源访问
事情没有太绝对,虽然同源策略是为了保护隐私,即,不是同源不可以访问对方的信息
但是在某些实际情况下,是可以进行协商的
1.jsonp
本质:跨源的对方给 发出请求的源的一段Javascript脚本执行,Script标签中的src属性是允许跨源的
2.CORS
原理:被请求的服务端获取发出请求方的请求后,给响应头加上Access-Control-Allow-Origin的相关信息,
浏览器就会放行请求,让请求方拿到数据
3.WebSocket
WebSocket是一种通信协议,使用 ws://(非加密)和wss://(加密)作为协议前缀
该协议不实行同源策略,只要服务器支持,就可以进行跨源通信