默认
发表评论 12
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] MobileIMSDK-Web进行Ajax跨域请求控制台报错的问题
在调用一个线上接口时控制台报错:

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 'Access-Control-Allow-Origin' header is present on the requested resource.

jquery-1.8.3.min.js:2 Cross-Origin Read Blocking (CORB) blocked cross-origin response https://rbchat_pro.52im.net:7083/rainbowchat_pro/rest_post with MIME type text/plain. See https://www.chromestatus.com/feature/5629709824032768 for more details.

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

接口1.png (73.08 KB, 下载次数: 1638)

接口1.png

错误信息.png (96.8 KB, 下载次数: 1704)

错误信息.png
推荐方案
评论 12
引用:JackJiang 发表于 2019-02-20 14:18
第一:ajax的跨域问题是浏览器厂产给的限制,谁也改变不了,这一块其实不复杂,只是你了解的太少,学习欲 ...

好的,谢谢
引用: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,文件上传的跨域就去扩服务端跨域配置。
引用:JackJiang 发表于 2019-02-19 18:48
我看明白了,你的意思是,调用你java这边的接口,出现的跨域问题你现在没找到解决办法?

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

我看明白了,你的意思是,调用你java这边的接口,出现的跨域问题你现在没找到解决办法?
引用:JackJiang 发表于 2019-02-19 12:49
画个图,把你部署情况描述情况,你写的文章逻辑太混乱了,看不明白了

如图

3.jpg (5.83 MB, 下载次数: 1638)

3.jpg
引用:IM、你好 发表于 2019-02-19 12:24
“https://rbchat_pro.52im.net:7083/rainbowchat_pro/rest_post”这个是从iOS里面取得一个接口(这个理 ...

画个图,把你部署情况描述情况,你写的文章逻辑太混乱了,看不明白了
引用:JackJiang 发表于 2019-02-19 10:04
我才注意到你帖子里的这个“https://rbchat_pro.52im.net:7083/rainbowchat_pro/rest_post”,你连我部署在 ...

https://rbchat_pro.52im.net:7083/rainbowchat_pro/rest_post”这个是从iOS里面取得一个接口(这个理解了)
MobileIMSDK-Web demo的端口3000
我用nodejs单独写的一个服务端8088的接口存在跨域,用网上的方法是可以解决的,结果都是可以调用的但是调用web项目8085端口的接口就不行,不明白为什么?
是不是因为服务端和客户端一起nodejs启动的原因?


2.png (35.08 KB, 下载次数: 1708)

2.png

1.png (114.08 KB, 下载次数: 1635)

1.png
我才注意到你帖子里的这个“https://rbchat_pro.52im.net:7083/rainbowchat_pro/rest_post”,你连我部署在线上的这个地址干什么呢,这个线上服务并不支持web的跨域调用,服务端是我的,你配置不了。

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

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

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

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

我另写了一个简单的服务端,提供几个测试接口,127.0.0.1:8088按照通常的跨域处理可以用,但是我起了另外项目(普通的web项目)的接口127.0.0.1:8085就不行,

接口2.png (36.8 KB, 下载次数: 1614)

接口2.png

接口1.png (85.55 KB, 下载次数: 1569)

接口1.png
以上问题跟代码无关。
你听说过经典的浏览器“跨域”问题吗?如果没有的话,你系统的学习一下,然后就知道怎么解决了。

如果还是不知道怎么做,继续在贴子里讨论。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部