部署 求教跨域访问策略在 development 模式下和 production 模式下的区别?

nightire · 2014年11月14日 · 最后由 foxzool 回复于 2014年11月15日 · 3401 次阅读

偶然发现一件很有意思但却摸不着头脑的事情,我有一个 Rails API 和一个前端 App,它们部署在不同的域名下,显而易见直接访问会有跨域问题。我要问的不是如何解决,实施 CORS 或是做反向代理都可以,我在产品服务器上用的是后者,一切 OK。

不过今天我在本地跑了一下 production,却发现出现了跨域访问的问题。先说一下本地我没有去做 HTTP 反向代理,因为我用的 ember-cli 自带 proxy,一直以来我都是 Rails 跑 development,ember-cli proxy 来在本地开发调试的——我以为 proxy 起作用所以不会出现跨域访问禁止,但我发现我又错了……当我在本地开启 production 之后,浏览器又报跨域访问禁止,这让我很惊讶,原来 ember-cli proxy 没用吗?

于是我切换回 development,然后不使用 ember-cli 的 proxy 功能,果然!访问正常,本地的 proxy 完全就是个摆设。

我不禁开始好奇,production 相比 development 到底做了什么事导致了这个差异呢?我对比了两个环境配置文件,似乎没有哪个设置项是和跨域访问有关的,那么差别究竟在哪里呢?

求指教。

看到楼主问问题,我整个人都不好了,楼主在我的印象中应该只是回复问题的,而且回复都被 like 成黄色。

看到楼主问问题,我整个人都不好了,楼主在我的印象中应该只是回复问题的,而且回复都被 like 成黄色。

看到楼主问问题,我整个人都不好了,楼主在我的印象中应该只是回复问题的,而且回复都被 like 成黄色。

我最近的项目也是一样的架构,rails 后端 api + ember-cli, 不过我是使用 CORS 解决跨域问题。

刚才在本地试了一下跑 ember server --environment=production --proxy http://xxx.com:8080
发现 XHR 请求还是走了 CORS,不知和楼主的区别是在哪里,ember 1.8.1 + ember-cli 0.1.2

#3 楼 @kikyous 正经分类话题别排队列。

一二三楼作死

#4 楼 @foxzool 问题是我没用 CORS ……

#1 楼 @Peter 哈哈,我是滥竽充数的。

#4 楼 @foxzool 啊,对了,我说的是在本地跑 rails s -e production 后发现的区别,不是 ember 这边。

production 模式默认不 serve asset 的吧?看配置了 不同的地方还有可能是 asset_host, default_host

#10 楼 @luikore 我一直猜测是 production 在 rack middlewares 这块和 development 有差异?但是不知道是不是这样,因为浏览器会检测 cross domain 肯定是根据 server response 吧?不知道有办法对比这两个环境下的 middleware stacks 吗?

#11 楼 @nightire 也有可能,例如 mini_profiler 之类的会改写 response... RAILS_ENV=production rake middleware

#12 楼 @luikore 谢谢,周末抽空研究研究看看。

@nightire 嗯,我也碰到过一样的问题,rails server 开 production 就死活接不了数据,development 没问题。

#14 楼 @darkbaby123 没折腾出原因来?后来是不是索性 CORS 去了?

@nightire 没折腾……我当时是想偷懒用本地的 ember app 连 production server 获取数据,后来没效果就没折腾了。

#9 楼 @nightire (⊙o⊙)…,原来这样是我理解错了,我一开始就直奔 CORS 了。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号