跨域解释与解决方案
浏览器不能执行其他网站的脚本,从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。
跨域是由浏览器的同源策略造成的,是浏览器施加的安全限制。a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的。
跨域中 http https 在同一个域名不同协议也是跨域的,www.like.baidu.com 与 www.baidu.com 也是跨域的 ,www.baidu.com 与 www.baidu.com:8080 也是跨域的,这块大家要注意!
解决途径:我一般工作中是这三种
1 通过nginx 配置反向代理实现:例如a.com/list.html 要调用b.com 我们先调用a.com/server.php, 在通过a.com/server.php 通过后端调用访问b.com拿到结果返回给a.com/list.html。
2 通过代码设置header 就是将跨域限制给取消掉,例如php中 header(‘Access-Control-Allow-Origin:*’);//允许所有来源访问 header(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式。
3 nginx中配置header 加入跨域允许也可以。
4 jsonp:只支持 GET,不支持 POST 请求,不安全 XSS ,(JSON with Padding(填充))是 JSON 的一种“使用模式”,本质不是 Ajax 请求,是 script 标签请求。 JSONP 请求本质上是利用了 “Ajax 请求会受到同源策略限制,而 script 标签请求不会” 这一点来绕过同源策略。