什么是ajax跨域问题,简单来说,就是在前台调用后台服务接口的时候,如果这个接口不是同一个域的,就会产生跨域问题
1、发生跨域问题是浏览器限制的问题
2、发出去的请求本身就是跨域
3、发出去的请求是XHR请求
普通的ajax请求发出的请求的type的xhr 返回的数据是一个json对象,那么什么是jsonp,它是一个官方协议,它是一个约定,它约定了我请求的参数里面如果包含了指定的参数,默认就是callback,这就是一个jsonp请求,服务器发现是jsonp请求的时候就会把返回的值由原来的json对象,转换成script代码,js代码是函数调用的形式,它的函数名称是callback参数的值,函数的参数是原来要返回的json对象,这就是jsonp协议工作的内容。
jsonp发出去的类型的script 返回的数据是一个js脚本,jsonp不是官方协议,但是它也是一个协议,约定返回的数据是js代码,js代码的内容就是callback的值做为函数名,返回的数据做为函数的参数.
jsonp是通过动态创建script,在script中把这个请求发出去了,在调用没压缩的jq中9800行左右的地方打断点我们就可以看到,jq动态创建一个js文件插入head cache:true 表示我们的结果可以被缓存
jsonp的弊端:需要服务器改动,只支持GET方法,发送的不是xhr请求
跨域的解决方向: 被调用方解决 / 调用方解决
第一种被调用方解决,这是一种基于支持跨域的一种解决思路,是基于http协议关于跨域方面的一些规定,在响应头里增加相应的字段,告诉浏览器我允许它调用,在这种解决文案面前,跨域请求是直接从浏览器发送出去的
第二种是调用方解决,这是一种隐藏跨域的解决思路,跨域请求不会从浏览器直接发到被调用方,而是从中间的http服务器转发过去的,假设调用方是a.com 被调用方是b.com,在浏览器上全是a.com的请求。
网友评论