欣赏器访问本地服务器(欣赏器访问本地端口)「欣赏地址」

  一、什么是跨域题目

  在页面中利用js访问其他网站的数据时,就会出现跨域题目,比如在网站中利用ajax哀求其他网站的气候、快递大概其他数据接口时,以及hybridapp中哀求数据,欣赏器会提示一下错误:

  cannotloadhttps://你哀求的域名.No'Access-Control-Allow-Origin'headerispresentontherequestedresource.Origin'https://当前页的域名'isthereforenotallowedaccess.

  二、为什么会出现跨域题目

  由于欣赏器收到同源战略的限定,当前域名的js只能读取同域下的窗口属性。

浏览器访问本地服务器(浏览器访问本地端口) 欣赏
器访问本地

服务器(欣赏
器访问本地

端口)「欣赏地址」 行业资讯

  同源战略:差别的域名,差别端口,差别的协议不答应共享资源的,保障欣赏器安全。

  同源战略时针对欣赏器设置的门槛。假如绕过欣赏就能实现跨域,以是说早期的跨域都是打着安全路数的擦边球,都可以以为是hack处理惩罚。

  三、如今总结一下办理跨域的几种方法

  1、jsonp跨域方法

  我们提供一个标签.哀求页面中的数据,同时传入一个回调函数的名字。服务器端得到名字后,拼接函数实行格式的字符串。发送回欣赏器。在下载代码以后并实行,实行的就是这个函数调用情势的字符串,因此就将本地函数调用了,同时拿到了从服务器端得到的数据。

  2、window.name

  window对象的name属性是一个很特别的属性,当该window的location变革,然后重新加载,它的name属性可以依然保持稳固。那么我们可以在页面A中用iframe加载其他域的页面B,而页面B中用Java把必要转达的数据赋值给window.name,iframe加载完成之后,页面A修改iframe的地点,将其变成同域的一个地点,然后就可以读出window.name的值了。这个方式非常得当单向的数据哀求,而且协议简单、安全。不会像JSONP那样不做限定地实行外部脚本。

  3、document.domain

  通过修改document的domain属性,我们可以在域和子域大概差别的子域之间通讯。同域战略以为域和子域从属于差别的域,比如www.a.com和sub.a.com是差别的域,这时,我们无法在www.a.com下的页面中调用sub.a.com中界说的Java方法。但是当我们把它们document的domain属性都修改为a.com,欣赏器就会以为它们处于同一个域下,那么我们就可以相互调用对方的method来通讯了。

  4、window.postMessage

  window.postMessage是HTML5界说的一个很新的方法,这个方法可以很方便地跨window通讯。由于它是一个很新的方法,以是在很旧和比力旧的欣赏器中都无法利用。

  5、借助于服务器代码来跨域(正向署理、反向署理)

  正向署理:我借助与我的服务器,像数据服务器发送数据,我的服务器只必要向数据服务器发送get哀求即可。

  反向署理:与正向署理雷同,但是不借助于脚本,而是直接利用服务器映射url。比方:我们的url是https://studyit.com数据服务器的url是https://api.botue.com/login在apache设置一个url的署理映射理论上利用url:https://studyit.com/api是在网站根目次下找api文件夹。但是如今apache提供一个映射的功能,将/api映射到https://api.botue.com有了这个映射,那么访问https://api.botue.com/login就可以利用/api/login来访问了.

  反向署理的长处:

  不但实现了跨域(服务器帮我们实现的),而且访问数据的时间就好像在访问本地服务器一样。云云,诸如cookie等数据就可以直接得到了。

  怎么利用反向署理(差别的服务器的利用方法不一样)

浏览器访问本地服务器(浏览器访问本地端口) 欣赏
器访问本地

服务器(欣赏
器访问本地

端口)「欣赏地址」 行业资讯

  1)找到httpd.conf设置文件,找到内里的porxy开头的两个模块加载项,去掉其解释。

  LoadModuleproxy_modulemodules/mod_proxy.soLoadModuleproxy_http_modulemodules/mod_proxy_http.so

  2)找到假造主机的设置文件.必要谁来做反向署理就修改谁的设置文件,在假造主机的设置中(就是那一对尖括号中)添加两个选项。ProxyRequestsOffProxyPass/abchttps://test2.com

  3)重启服务器

  6、CORS跨域

  CORS是在es5之后提出的跨域方案.只必要在服务器设置一个跨域相应头接口。与jsonp相比的长处:

  1、JSONP只能实现GET哀求,而CORS支持全部范例的HTTP哀求。2、利用CORS,开辟者可以利用平凡的发起哀求和得到数据,比起JSONP有更好的错误处理惩罚。3、JSONP重要被老的欣赏器支持,它们每每不支持CORS,而绝大多数当代欣赏器都已经支持了CORS。

  代码如下:

  客户端:

!DOCTYPEhtmlhtmlheadmetacharset="UTF-8"metaname="viewport"content="width=device-width,initial-scale=1.0"metahttp-equiv="X-UA-Compatible"content="ie=edge"titleDocument/title/headbodybuttonid="btn"哀求/buttonsrc="./jquery-3.2.0.js"/$('#btn').click(function(){$.ajax({url:'https://test2.com/03-index.php',success:function(info){console.log(info);}});});//body/html

  服务器端:

?php//header('Access-Control-Allow-Origin:*');//答应恣意的网站跨域header('Access-Control-Allow-Origin:https://test1.com');//答应指定网站echo'cors跨域';?

  尚学堂专注IT教诲10年,与各大企业、公司相助,共同为社会运送了大批IT人才,尚学堂更有马士兵老师亲身代课,包管讲授质量。

  假如对编程感爱好,对进入IT行业感爱好,加微信(858568103)相识更多编程信息。

客户评论

我要评论