前言
作为一个前端人员,除了完成各种秀的飞起的页面外,最常打交道的应该就是 通过浏览器向后端发送ajax请求
,请求响应数据,并对数据做出相对应的处理了,但是只要是发请求那就逃不开会碰到请求跨域的问题了。
1、什么是跨域?
跨域
:指的是浏览器不能执行其他网站的脚本。它是由 浏览器的同源策略
造成的,是浏览器对javascript施加的安全限制。
例如:a页面想获取b页面资源,如果a、b页面的 协议、域名、端口
不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。理解这一点很重要!!!
同源策略
:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;
2、解决方法
- 前端用JSONP方式去发请求(jsonp不是ajax请求);
- 第三方网站开启HTTP的Access-Control-Allow-Origin参数:
只有当目标页面的response中,包含了 Access-Control-Allow-Origin 这个header,并且它的值里有我们自己的域名时,浏览器才允许我们拿到它页面的数据进行下一步处理; - 代理转发
将自身的服务器或是同源(协议、域名、端口号)
的其他服务器当做代理服务器,先把浏览器的请求发送到代理服务器中,再通过代理服务器发送请求访问目标服务器,最后将目标服务器返回的数据显示在网页当中。
原理:同源策略是浏览器的限制,但是服务器与服务器之间并不存在同源策略的限制。
总结
只是一个小小的请求就能有这么多解决方案,其中还要照顾到浏览器的兼容性问题,果然还是我太菜了,继续努力学习吧