ajax跨域完全讲解

跨域产生的原因:

  1. 浏览器限制 。如果浏览器发现请求是跨域的时候,就会做校验,如果校验不通过就会报跨域的错误
  2. 跨域 。发出去的请求只要域名、端口、协议中的任意一个与当前域不同的时候,都会发生跨域
  3. 发送的XHR(XMLHTTPRequest)请求 。如果发送的不是xhr请求,无论是否跨域,浏览器都不会报错
只有这三种原因同时满足时,才会发生跨域
解决跨域的方法
  1. 浏览器角度 。让浏览器不做校验,浏览器的设置跨域,在浏览器的属性设置页面的目标输入框加上--disable-web-security 。这样浏览器将不会去做校验了 。但是每个人都需要去改动,不建议使用 。
  2. 发送xhr请求角度 。让跨域的请求不发送xhr请求,就不会再报错了 。办法是使用jsonp:jsonp是非官方协议,是前后端的一种约定,前端使用ajax发送请求,dataType为jsonp,并且带一个参数(默认是callback),当后台发现这个参数之后,就知道这是一个jsonp请求,就会把原本返回json对象编程js返回,js代码是一个函数的执行,函数名是callback的参数值,函数的参数是原本的json对象 。缺点:1).只支持get方法请求;2).需要服务器修改代码;3).发送的不是xhr请求
  3. 在跨域角度 。1).被调用方解决:在响应头增加指定字段,告诉浏览器,允许调用,这种方法的原理是从根源支持跨域的 。各种解决方式,请参考详细解决笔记;2).调用方解决:这种解决办法原理是隐藏跨域 。使用代理,在同一个域请求不同的url地址,转发到不同的域 。

【ajax跨域完全讲解】


    推荐阅读