什么是跨域:不符合同源策略,也就是协议、IP、端口有一个不一致就是跨域,从而限制交互行为。
为什么会出现浏览器跨域限制:避免数据出现安全问题,如果没有跨域限制,可以随意读取任意域名下的cookie,很容易发生CSRF攻击。
对于浏览器来说,哪些资源会受到同源策略的限制:DOM、cookie、XMLHttpRequest、第三方插件等。
跨域限制有什么问题:用户无法进行交互行为,上网的意义在何处?
如何解决跨域问题:
1、服务器代理:http-proxy-middleware--------原理:服务器之间的请求不存在跨域问题
2、nginx代理:配置跨域代码 proxy-pass后面跟一个跨域的地址
3、cors:服务端的代理方式----设置响应头:header(Access-Control-Allow-Origin:*);
4、jsonP(只支持GET):通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且把我们需要的json数据作为参数传入。
为什么ajax会造成跨域:
受同源策略的限制,协议、ip、端口有一个不同就是跨域。如果跳转页面了,不存在跨域。ajax是不刷新页面,不进行跳转,所以ajax具有跨域问题。利用cors、服务器代理和nginx代理可以解决。
jsonP的原理:
表单中的action、script中的src、a标签和link标签中的href都会造成页面的跳转,所以这不存在跨域的问题。jsonP的原理是利用script的src进行跳转,前端将函数传到服务端,服务端将函数加工后再返回,所以jsonp和ajax不是一回事。