关于跨域的一个疑问,后端服务和前端应用肯定是不同的端口

跨域的定义:域名,端口,协议,只要有一个不同,就算跨域

1,后端服务有一个自己的ip和端口号,前端web页应用有一个自己的ip和端口号,那它们的ip能否通过nginx来映射在同一个域名上?先撇去端口号不谈,它们的ip虽然不同,但是都映射到同一个域名,所以不会有跨域问题?

2,现在来看端口号,就算上面第1点它们的域名都相同了,后端服务是一个独立的进程,前端web页面肯定也是属于一个独立的web应用,它们在操作系统下肯定有不同的端口。那岂不是,只要web页面要调后端服务的接口,就一定会产生跨域?因为它们的端口号不一样。

3,如果一个服务部署在多台机器上,水平拓展。假设这些服务映射的都是同一个域名,但各个服务的端口号也不能保证都相同吧。那前端去调接口,跨域问题不管怎么样都会出现啊?

4,会不会是这样的,就是把服务和前端应用都通过nginx绑定在同一个域名同一个端口下,那它们自己本身的端口号就不用管了

5,两个不同的二级域名能不能认为是同一个域名?

被这个跨域搞得有点晕,感觉可能是哪里概念混淆了,但又不知道哪里混淆了。。。

阅读 16k
3 个回答

前后端走不同端口是不假,可是服务器也可以转发啊,比如可以用nginx把所有带.php的请求转发到9000端口,直接交给php-fpm自己去处理,这个用服务器配置来做就可以了,并不需要用户端手动去指定发送端口,并且我觉得把后台细节暴露给前端是不太舒服的。
还有一种做法,是前台自己负责一个中台,比如可以用php或者是node,把后台的细节封装起来,然后向前台提供服务器渲染,或者充当Ajax代理。这样后端跟后端之间通信就不用搞啥跨域问题了,而且如果是用阿里云这种,可以考虑把通信地址全改内网ip,后端直接藏到内网里就好,前端也可以随便改下返回的数据,自由度相对更高。

跨域是浏览器禁止的

谁说的后台服务和前端应用一定在不同端口?你试试把静态页面后后台文件放在一起启动看看会不会在不同端口。
你觉得前后端会跨域大概是因为,你前端用vue、react之类的框架npm打包从8080启动,后台自己写的express、koa之类的从自定义(如3000)端口启动的,这时会产生跨域问题,你用.net、javaweb直接把前后台写一起才不会端口不一样。前后端分离是为了分工更明确。
所以说前后端一定跨域吗?不一定
而比起如何避免跨域更重要的问题是如何解决跨域。因为这不是一个无法解决非要避免的问题。如果你是一个前端建议你更偏向了解下什么情况下会跨域,为什么会有跨域概念,和如何解决跨域问题。因为这不是一个必须要规避的问题。
如果你愿意了解,给你一个地址
http://blog.csdn.net/riddle19...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题