跨域问题

230 阅读1分钟

同源

源 = 协议+域名+端口号

如果两个url的协议,域名,端口号一模一样。即为同源

同源策略

不同源的页面之间,不允许互相访问数据

跨域

浏览器设置了同源策略,保护了用户的隐私。但是现实中不同源之间可能也会需要数据交流。这就需要跨域来实现在不同源的情况下也可访问数据。常见的方法有cors跨域和jsonp跨域

cors跨域

该机制使用附加的 HTTP 头来告诉浏览器,准许运行在一个源上的Web应用访问位于另一不同源选定的资源。 当一个Web应用发起一个与自身所在源(域,协议和端口)不同的HTTP请求时,它发起的即跨源HTTP请求。

Access-Contorl-Allow-Origin: http://www.xxxxx.com

jsonp跨域

ie 6 7 8 9 并不支持cors跨域,所以将数据写在js中,进行引用。 JSONP是通过 script 标签加载数据的方式去获取数据当做 JS 代码来执行; 提前在页面上声明一个函数,函数名通过接口传参的方式传给后台,后台解析到函数名后在原始数据上「包裹」这个函数名,发送给前端。换句话说,JSONP 需要对应接口的后端的配合才能实现。

但是jsonp并不支持post,只能发get请求。并且不能精确的知道状态码。