浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
由于同源策略的缘故,ajax不能向不同域的网站发出请求。
比如a站本地主机需要向b站请求数据,地址为:http://www.walk-sing.com/api.php
请求的代码如下:
超文本标记语言脚本src=' http :http://libs。百度。com/jquery/1。9 .0/jquery。js /脚本脚本脚本类型='text/javascript' $ .get(' http://www。走路唱歌。com/API。PHP ',函数(数据){ alert('数据加载: ' Data);});/脚本正文/正文/html访问该页面,页面空白,按F12打开控制台,可以看到截图所示信息:
解决方案1:jsonp
我们先来看这样一个例子:
超文本标记语言脚本src=' http :http://libs。百度。com/jquery/1。9 .0/jquery。js /脚本脚本脚本类型='text/javascript '函数警报模式(数据){警报(数据。姓名数据。年龄);} alertometang({ ' name ' : ' Ben ',' age ' :24 });//$.get(' http://www。走路唱歌。com/API。PHP ',函数(数据){//警报('数据加载: '数据);//});/脚本正文/正文/html执行结果:
我们也可以这样写:
超文本标记语言脚本src=' http :http://libs。百度。com/jquery/1。9 .0/jquery。js /脚本脚本脚本类型='text/javascript '函数警报模式(数据){警报(数据。姓名数据。年龄);};//$.get(' http://www。走路唱歌。com/API。PHP ',函数(数据){//警报('数据加载: '数据);//});/script script type=' text/JAVAScript ' src=' http : alert meting。js '/脚本正文/正文/html alert meting。射流研究…的内容如下:
alertsometang({ ' name ' : ' Ben ',' age ' :24 });也可以得到截图所示结果。
我们再换一个方式,将alertsomething.js上传到服务器,将代码改为如下形式:
超文本标记语言脚本src=' http :http://libs。百度。com/jquery/1。9 .0/jquery。js /脚本脚本脚本类型='text/javascript '函数警报模式(数据){警报(数据。姓名数据。年龄);};//$.get(' http://www。走路唱歌。com/API。PHP ',函数(数据){//警报('数据加载: '数据);//});/script script type=' text/JavaScript ' src=' http :http://www。走路唱歌。com/alert saming。js '/脚本正文/正文/html也可以得到截图所示结果。
不知道大家发现没有,脚本标签没有同源策略的限制,jsonp正是基于此原理实现的。
jsonp的具体实现可参见如下代码:
jsonp.php
?PHP $ method=isset($ _ GET['回调'])?$_GET['回调']:"";if(!isset($method)){ exit('错误请求');} $testArr=array('name'='ben ',' age '=23);回声$方法。'('.json_encode($testArr).')';射流研究…代码:
超文本标记语言脚本src=' http :http://libs。百度。com/jquery/1。9 .0/jquery。js /脚本脚本脚本类型='text/javascript '函数警报模式(数据){警报(数据。姓名数据。年龄);};//$.get(' http://www。走路唱歌。com/API。PHP ',函数(数据){//警报('数据加载: '数据);//});/script script type=' text/JavaScript ' src=' http :http://www。走路唱歌。com/jsonp。PHP?回调=alert saming “/脚本正文/正文/html也可以得到截图所示结果。
解决方案二:CORS(跨域资源共享跨来源资源共享)
不知道大家发现了没有,jsonp只能发送得到请求,而如果业务中需要用到邮政请求时,jsonp就无能为力了。
这时候cors(跨域资源共享跨来源资源共享)就派上用处了。
克-奥二氏分级量表的原理:
克-奥二氏分级量表定义一种跨域访问的机制,可以让创建交互式、快速动态网页应用的网页开发技术实现跨域访问克-奥二氏分级量表允许一个域上的网络应用向另一个域提交跨域创建交互式、快速动态网页应用的网页开发技术请求。实现此功能非常简单,只需由服务器发送一个响应标头即可。就拿前面第一个例子来说,我只要在api.php文件头加上如下一句话即可:
标头('访问控制-允许-来源: * ');再次请求该接口,结果如下截图所示:
以上就是jsopn跨域请求的原理和边肖介绍的cors(跨域资源共享)的完美解决方案。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!
版权声明:浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。