首页 > 后台api接口和web项目不在一块,如何解决请求跨域的问题?

后台api接口和web项目不在一块,如何解决请求跨域的问题?

有没有在不改变api接口的情况下,解决请求跨域的问题呢


还有一种办法就是在你的web中使用后端的语言,比如php、java去请求api接口拿到数据,然后给你web项目,只不过中间多了一个转接。


个人看法,上面别人的回答里提到的Jsonp并不是一个好的方案。
我自己是前端后端移动端都做的,强烈建议:
【后端的API接口使用标准的JSON
好处也很明显,Jsonp只适合WEB端,并且在WEB端也只是JSON的妥协方案。

http://moonlordapi.sinaapp.com/test.php
上面这个地址请随意测试,可以跨域请求的。
代码如下

<?php
header("Access-Control-Allow-Origin:*");
header("Access-Control-Allow-Methods:GET, POST, OPTIONS, DELETE");
header("Access-Control-Allow-Headers:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");
//……

问题是,“不改变api接口的情况下”……
一群人回答JSONP简直是醉了……
解决跨域问题的最直接简单的方法就是加这个Access-Control-Allow的响应头。
题主可以自行百度。。。。。。


jsonp。


其他的方案无非是

1、代理嘛
2、动态语言作代理嘛,(例如php先把结果curl过来)
3、access control header嘛

能解决问题的方案中,
假设你无权动API服务端,那么最简单的方法是前端页面使用jsonp,比较正规的做法是服务端去请求API,
然而如果你有权限改服务端,那么加个header更简单。


除了 jsonp 之外,如果 api 接口和 web 都是你自己的项目,可以在 api 和 web 服务前放置一个逆向代理。Nginx 经常被用来干这个。

这个方法虽然很重,但是最能解决问题。首先原理是显而易见的,不依赖任何浏览器版本,其次当你的后台系统比较复杂时,经常会被拆分为多个独立的服务,此时逆向代理已经存在,你索要做的,就是把 json api 服务移到逆向代理后面而已。


同上,jsonp


自己用写代理都台坑了,直接配置一下nginx来做代理就行。


api后端返回的时候添加Access-Control-Allow-Origin头信息,就能支持跨域请求。
服务端使用jquery的ajax需要增加crossDomain: true,参数


不妨换个思路,为何发请求一定要在前段,后端也能发请求不是么。这样接口就不用改变

【热门文章】
【热门文章】