同源:指的是两个或者多个网页在一个域下面,必须满足以下三个条件
- 协议相同(protocol)
- 主机相同(host)
- 端口相同(port)
举例个例子,http://www.baidu.com/index.html
这个网址,协议是http://
,域名是www.baidu.com
,端口号没写默认是80
(https协议中默认端口是443),它的同源情况如下。
http://www.baidu.com:80/index.html //
同源https://www.baidu.com/index.html //
不同源(协议不同,端口也不同)http://www.baidu.cn/index.html //
不同源(域名不同)http://www.baidu.com/login.html //
同源
跨域:与同源相对,当同源三项条件有一项不满足的时候,就会产生跨域。跨域本质是浏览器基于同源策略的一种安全手段 。跨域产生的原因是前后端分离开发,项目工作环境不一样。
同源策略: 是一种约定,它是浏览器最核心也最基本的安全功能。同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
三者关系:当一个页面去调用另一个页面资源的时候,就会产生跨域,这是因为受到了同源政策的约束,不满足同源的条件,所以浏览器不会响应该请求,但是数据还是照样发送给了服务器。
解决跨域的方法有三种:
1.Proxy 。 使用服务器代理,它是一种特殊的网络服务,允许一个(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。
2.CORS 。它是一个系统,它由一系列传输的HTTP头组成,这些HTTP头决定浏览器是否阻止前端 JavaScript 代码获取跨域请求的响应。
3.JSONP。 不发Ajax请求,发出的是 script 中的src请求。利用<script>标签的跨域能力实现跨域数据的访问。(只支持get请求的方式,因为通过src发送的请求都是get方式)