码迷,mamicode.com
首页 > 其他好文 > 详细

跨域问题

时间:2017-10-02 09:39:36      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:根据   resource   决定   tom   w3c   ping   解决   header   方案   

什么是跨域
如大家所知,出于安全考虑,浏览器会限制脚本中发起的跨站请求。比如,使用 XMLHttpRequest 对象发起 HTTP 请求就必须遵守同源策略(same-origin policy)。 具体而言,Web 应用程序能且只能使用 XMLHttpRequest 对象向其加载的源域名发起 HTTP 请求,而不能向任何其它域名发起请求。

解决策略
1、古老的jsonp方法(很麻烦需要前后端配合,而且只能用get方式)
2、反向代理(没用过,想了解的可以百度)
3、h5的CORS(很方便前端,因为这个是后端负责)

我只讲CORS

目前我在使用前后端分离的项目,然后就出现了跨域问题。前后端分离是大势所趋,跨域就显得尤为常见啊
在寻找跨域解决方案时,发现了最优雅解决方案就是HTML5来带了的“Cross-Origin Resource Sharing”的新特性,来赋予开发者权力决定资源是否允许被跨域访问。
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
只要服务器实现了CORS接口,就可以跨源通信。
技术分享

 

大家看到没有,这是两个不同的项目,一个跑在tomcat服务器下,一个在nginx服务器下。端口ip都不一样,就产生了跨域
技术分享

技术分享

利用cors解决跨域
在后端,开启cors接口,允许跨域请求,前端就可以跨域了
只需要在springmvc的xml配置文件(默认为dispatcher-servlet.xml)加入这句就行了

<!--path:允许请求的接口-->
    <!--origins:允许被哪些网站请求-->
    <!--methods:允许哪些http行为-->
    <mvc:cors>
        <mvc:mapping path="/**"
                     allowed-origins="http://127.0.0.1:8020"
                     allowed-methods="POST, GET, OPTIONS, DELETE, PUT"
                     allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
                     allow-credentials="true" />
    </mvc:cors>

 

再看
技术分享

 



 

所以啊,跨域问题,面试官请不要老问我们前端怎么解决,很多办法必须是后端配合或者是纯后端解决,我们前端搞不了。
jsonp需要前后端配合,后端返回jsonp格式的数据,我们前端根据商量好的函数名,来取
反射代理,完全由后端做
cors,完全由后端做,我们浏览器开放了权限,但也不是我们前端左右的
-----所以,不要再问我们前端跨域怎么解决了,没有意义!!!!!-----

跨域问题

标签:根据   resource   决定   tom   w3c   ping   解决   header   方案   

原文地址:http://www.cnblogs.com/flyings/p/7618366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!