JSONP && CORS

跨域必须先知道同源策略。

JSONP

html中script标签可以引入其他域下的js,比如引入线上的jquery库。利用这个特性,可实现跨域访问接口。需要后端支持

echo $cb . '&&' . $cb . '(' . json_encode($ret) . ')';
定义数据处理函数_fun
创建script标签,src的地址执行后端接口,最后加个参数callback=_fun
服务端在收到请求后,解析参数,计算返还数据,输出 fun(data) 字符串。
fun(data)会放到script标签做为js执行。此时会调用fun函数,将data做为参数。
举个例子:
1.script标签会把资源下载下来作为资源取运行


JSONP && CORS_第1张图片
1

2.routerjs这是后端接口


JSONP && CORS_第2张图片
后端接口

3.在页头创建script标签然后去加载


JSONP && CORS_第3张图片
3

4.这就是里面的数据


JSONP && CORS_第4张图片
这就是里面的数据.jpg

5.这是后端的处理,去解析callback这个参数


JSONP && CORS_第5张图片
5

6.当然我们可以进行一下扩展


JSONP && CORS_第6张图片
6

7.让他加载之后又立刻删掉


JSONP && CORS_第7张图片
7

这就是JSONP的过程。

CORS

CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。 实现方式很简单,当你使用 XMLHttpRequest 发送请求时,浏览器发现该请求不符合同源策略。
会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求则在返回结果中加入一个响应头:Access-Control-Allow-Origin; 浏览器判断该相应头中是否包含 Origin 的值,如果有则浏览器会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这时我们无法拿到响应数据。所以 CORS 的表象是让你觉得它与同源的 ajax 请求没啥区别,代码完全一样。

你可能感兴趣的:(JSONP && CORS)