欢迎来到天天文库
浏览记录
ID:31631286
大小:57.24 KB
页数:5页
时间:2019-01-16
《js跨域原因及其解决方案》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JS跨域原因及其解决方案产生跨域问题的原因跨域问题是浏览器同源策略限制,当前域名的JS只能读取同域下的窗口属性。跨域问题产生的场景当要在在页面中使用JS获取其他网站的数据时,就会产生跨域问题,比如在网站中使用ajax请求其他网站的天气、快递或者其他数据接口时以及hybridapp中请求数据,浏览器就会提示以下错误。这种场景下就要解决js的跨域问题。XMLHttpRequestcannotloadhttp://你请求的域名.No'Access-Control-Allow-0rigin,headerispresentont
2、herequestedresource.Origin'http://当前页的域名'isthereforenotallowedaccess.哪些情况会产生跨域问题一个网站的网址组成包括协议名,子域名,主域名,端口号。比如https://github.com/,其中https是协议名,www是子域名,github是主域名,端口号是80,当在在页面中从一个ur1请求数据时,如果这个url的协议名、子域名、主域名、端口号任意一个有一个不同,就会产生跨域问题。即使是在http://localhost:80/页面请求http://
3、127.0.0.0:80/也会有跨域问题解决跨域问题解决跨域问题有以下一种方式使用jsonp服务端代理服务端设置RequestHeader头中Access-Control-Allow-Origin为指定可获取数据的域名jsonp的解决方式jsonHjsonp原理jsonp解决跨域问题的原理是,浏览器的script标签是不受同源策略限制(你可以在你的网页中设置script的src属性问cdn服务器中静态文件的路径)。那么就可以使用script标签从服务器获取数据,请求时添加一个参数为callbakc=?,?号时你要执行的
4、回调方法。前端实现以jQuery2.1.3的ajax方法为例$.ajax({ur1:"",dataType:"jsonp",data:{params:""}}).done(function(data){//dosomething..})仅仅是客户端使用jsonp请求数据是不行的,因为jsonp的请求是放在script标签中的,和普通请求不同的地方在于,它请求到的是一段js代码,如果服务端返回了json字符串,那么浏览器就会报错。所以jsonp返回数据需要服务端做一些处理。服务端返回数据处理上面说了jsonp的原理是利用
5、script标签来解决跨域,但是script标签是用来获取js代码的,那么我们怎么获取到请求的数据呢。这就需要服务端做一些判断,当参数中带有callback属性时,返回的type要为application/javascript,把数据作为callback的参数执行。下面是jsonp返回的数据的格式示例//typeofjQuery21307270454438403249_1428044213638二二二'function'amp;amp;jQuery21307270454438403249_1428044213638({
6、〃code":1,〃msg:success,data:test:testjj);这是express4.12.3关于jsonp的实现代码代码如下://jsonpif(typeofcallback=二二'string'amp;amp;callback.length!==0){this.charseutf—8';this・set('X-Content-Type-Options','nosniff');this.setCContent—Type,,,text/javascript');//restrictcallbackcha
7、rseteallback=ca.llbreplacecharack.replacesnotallowedy.replace(/29/g,'\u20mitigationfpeofcheckis'//typeofinJavaScripu2028/g,'29');//the/or〃RosettoFjusttoreduc+callback+,=tthatareinju2028,).re/isaspecilashJSONPabeclienterron’fSONbody=bodplace(/u20ficsecurityu
8、se"//thetyrnoisebody=
此文档下载收益归作者所有