最近在看跨域的知识,介于不是很了解其使用场景,故非常难受。
- 前端跨域这个技术是有何需求发展起来的?
- 其常见的使用场景是什么呢?
- 需要访问其他服务器资源,api之类的,后端服务器处理很方便,为何要前端来处理呢?(只是单纯的想让浏览器来做处理,不增加服务器负担么?)
补充:
明明浏览器默认禁止的,有安全问题,有诸多不便,为何还要排除万难,历经艰辛要从前端发送请求?
最近在看跨域的知识,介于不是很了解其使用场景,故非常难受。
补充:
明明浏览器默认禁止的,有安全问题,有诸多不便,为何还要排除万难,历经艰辛要从前端发送请求?
前端跨域只能用jsonp之类的去处理,往往做跨域配置应该在后端,也是出于安全性考虑,这还有必要去想?我还不懂除了jsonp外用什么前端技术能做跨域而不需要后端改代码的,cross也需要后端配合,所以这种问题不必考虑,这是团队大佬应该去衡量的事。
关于跨域的原由:这个其实没啥好疑惑的,为了安全,同源策略有了,源、域:由协议【https、http】+域名【a.com】+端口【80、443】组成,(ie中略有不同),同源策略是浏览器的核心安全策略,目的是将来自不同源的资源进行隔离,并控制不同源资源间的通信,从而减少安全威胁,增强安全性。
那么问题来了:如果两个不同的源都是我们自己的,a.com、b.com都是公司的,还有一些公用的接口,你是打算后端部署两套还是希望打破同源,实现复用?后者就是需要跨域的根本。
顺便可以看看:https://segmentfault.com/a/11...
https://rawbin-.github.io/%E5...
补充的东西就不合适了,请求都是从前端开始的
什么是跨域?
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子:
http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)
http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)
http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)
http://www.123.com:8080/index... 调用 http://www.123.com:8081/serve... (端口不同:8080/8081,跨域)
http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)
请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。
浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。
本身浏览器是禁止ajax跨域的,但是有的项目是前后台完全分离的项目,前台是改一个project后台是一个project。你页面的ajax请求后台的数据显示到页面上是就存在了跨域访问。
1、JSONP:
使用方式就不赘述了,但是要注意JSONP只支持GET请求,不支持POST请求。
2、代理:
例如www.123.com/index.html需要调用www.456.com/server.php,可以写一个接口www.123.com/server.php,由这个接口在后端去调用www.456.com/server.php并拿到返回值,然后再返回给index.html,这就是一个代理的模式。相当于绕过了浏览器端,自然就不存在跨域问题。
3、PHP端修改header(XHR2方式)
在php接口脚本中加入以下两句即可:
header('Access-Control-Allow-Origin:*');//允许所有来源访问
header('Access-Control-Allow-Method:POST,GET');//允许访问的方式
喜欢的话点个赞呗。:)
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
1 前端跨域这个技术是有何需求发展起来的?
最早的网页大家以浏览为主,从一个页面点到另外一个页面,与服务器的交互就这么点儿,所以web的标准其实也没有考虑到互联网发展那么快,所以根本没有为跨域做好准备。当前端交互越来越复杂,用户对页面可用性,易用性要求越来越高的时候,就需要通过前端异步的做更多事情,其中有部分事情就需要跨域。有了跨域的需求,标准又没有及时更进,那么技术人员就只能依靠自己力量来解决了。比如jsonp, iframe等等,后来标准跟上 xhr可以跨域,CORS协议来跨域。
2 其常见的使用场景是什么呢?
自己的服务器不能提供所有服务(或者说有一些现成的服务可以利用),比如 我要活得当前用户所在的经纬度(要精确的),那么一些地图公司可能就有一些开放稳定的api能用。自己开发的成本又特别高。跨域场景就来了
前后端分离,前端页面和后端服务所部署的域名也不一定在同一个域,会产生跨域的需求。特别是越大的团队、大企业,业务众多、开发又要工程化,要把所有业务都整合到一个域名下几乎不太可能。
3 需要访问其他服务器资源,api之类的,后端服务器处理很方便,为何要前端来处理呢?(只是单纯的想让浏览器来做处理,不增加服务器负担么?)
如果前端能依靠自己的技术稳定的解决跨域调用,那么没有必要通过一次后端透明代理。所以这个是一个解决成本的问题。显然不通过后端带来的成本更低。