默认

[已回复] MobileIMSDK-Web进行Ajax跨域请求控制台报错的问题

查看数: 28477 | 评论数: 12 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-02-14 16:58

正文摘要:

在调用一个线上接口时控制台报错: Access to XMLHttpRequest at 'https://rbchat_pro.52im.net:7083/rainbowchat_pro/rest_post' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Ac ...

评论

IM、你好 发表于 5 年前
引用:JackJiang 发表于 2019-02-20 14:18
第一:ajax的跨域问题是浏览器厂产给的限制,谁也改变不了,这一块其实不复杂,只是你了解的太少,学习欲 ...

好的,谢谢
JackJiang 发表于 5 年前
引用:IM、你好 发表于 2019-02-20 09:40
对的,
第一,不明白为什么客户端Ajax调用Java代码接口会出现跨域,maven项目里面的HTML调用都没跨域问 ...

第一:ajax的跨域问题是浏览器厂商给的限制,谁也改变不了,这一块其实不复杂,只是你了解的太少,学习欲望也比较低,所以比较纠结。
第二:我没用过nodejs实现http接口,但我的RainbowChat-Web产品中,用tomcat实现http接口解决跨域问题时,参考这个帖子就能解决:https://www.cnblogs.com/zhaoyanhaoBlog/p/9370830.html

其实,总结一下就是,用JSONP技术,在Ajax调用时可以彻底解决跨域问题,而且不需要服务端、或者请求头做单独设置,因为JSONP技术原理就是请求js文件,这个没有任何的限制。
之所以要设置服务端或者请求头里设置,是因为要解决文件上传这个跨域问题,因为文件上传的跨域问题没有办法用JSONP了(关于文件上传免刷新和跨域问题,话题就比较大了,你有兴趣可以系统地了解学习)。

所以总之,最佳实践就是用JSONP,文件上传的跨域就去扩服务端跨域配置。
IM、你好 发表于 5 年前
引用:JackJiang 发表于 2019-02-19 18:48
我看明白了,你的意思是,调用你java这边的接口,出现的跨域问题你现在没找到解决办法?

对的,
第一,不明白为什么客户端Ajax调用Java代码接口会出现跨域,maven项目里面的HTML调用都没跨域问题
第二,nodejs前后端分离,如果ip端口都不一样,如果出现跨域问题,通过设置请求头能不能解决掉
JackJiang 发表于 5 年前

我看明白了,你的意思是,调用你java这边的接口,出现的跨域问题你现在没找到解决办法?
JackJiang 发表于 5 年前
引用:IM、你好 发表于 2019-02-19 12:24
“https://rbchat_pro.52im.net:7083/rainbowchat_pro/rest_post”这个是从iOS里面取得一个接口(这个理 ...

画个图,把你部署情况描述情况,你写的文章逻辑太混乱了,看不明白了
JackJiang 发表于 5 年前
我才注意到你帖子里的这个“https://rbchat_pro.52im.net:7083/rainbowchat_pro/rest_post”,你连我部署在线上的这个地址干什么呢,这个线上服务并不支持web的跨域调用,服务端是我的,你配置不了。

你用你自已的服务端配置一下tomcat就好了,跨域这方面的资料百度一下就一大把。如果还不知道,你具体配置的时候,蒙逼的话,跟我说,我直接截代码你看吧。。
跨域这么经典的问题,解决都这么费劲的话,不应该啊
IM、你好 发表于 5 年前
引用:JackJiang 发表于 2019-02-18 19:03
IP+端口都要一样才不会发生跨域问题。这一块你完全可以百度系统地学习一下,tomcat或nodejs可以在服务端配 ...

我是将MObileIMSDK-Web的demo运行,端口3000
写了一个简单的nodejs服务端接口,端口8088
web项目接口,端口8085

在demo调用demo自己的接口不同(设置请求头,jsonp都不行)
在demo调用8088端口的接口不通(设置请求头可行)
在demo调用8085端口的接口不通
JackJiang 发表于 5 年前
IP+端口都要一样才不会发生跨域问题。这一块你完全可以百度系统地学习一下,tomcat或nodejs可以在服务端配置解决的,另外,你了解一下JSONP这个技术,也是用来解决跨域问题的。

我看你的回答,看的出来你对这个问题的了解基本没有,系统地学习一下吧,搞web应用不懂这个不行。况且不是什么复杂的事情
JackJiang 发表于 5 年前
以上问题跟代码无关。
你听说过经典的浏览器“跨域”问题吗?如果没有的话,你系统的学习一下,然后就知道怎么解决了。

如果还是不知道怎么做,继续在贴子里讨论。

返回顶部