为啥 CORS 在使用 'lvh.me' 时适用于 localhost?

Posted

技术标签:

【中文标题】为啥 CORS 在使用 \'lvh.me\' 时适用于 localhost?【英文标题】:Why does CORS apply on localhost when using 'lvh.me'?为什么 CORS 在使用 'lvh.me' 时适用于 localhost? 【发布时间】:2013-08-26 13:08:33 【问题描述】:

在我使用 rack-cors (https://github.com/cyu/rack-cors) 之前,我的 Rails 应用和 JS 前端应用中存在 CORS 问题。

JS 前端应用程序将是我的 Rails 应用程序的子域。所以我不应该在生产中遇到这个问题。但是在本地,我在服务器上运行我的前端应用程序:

python -m SimpleHTTPServer

然后我通过http://dashboard.lvh.me:8000 访问它。所有对后端 Rails 应用程序的调用均发送至api.lvh.me:3000

在不处理 CORS 的情况下执行请求时,出现 CORS 错误。当两者都在同一个子域 (lvh.me) 上时,为什么会出现 CORS 错误?这发生在所有浏览器中。

为什么我需要使用 rack-cors?这也会发生在生产中吗?现在,我正在运行rails s。使用nginx时,如果两者在同一个域但不同的子域,这种情况会消失吗?

【问题讨论】:

【参考方案1】:

同源策略适用于整个域,甚至端口号(IE 除外)。从 dashboard.lv.me:8000 向 api.lv.me:3000 发送请求是一个跨域请求。其实这些也是跨域调用:

dashboard.lv.me:8000 -> ap.lv.me:8000 ap.lv.me:8000 -> ap.lv.me:3000(IE 除外)

【讨论】:

以上是关于为啥 CORS 在使用 'lvh.me' 时适用于 localhost?的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 中的子域之间共享会话(cookie)?

为啥 CORS 只用于 Javascript 而不是 PHP? [复制]

为啥 CORS 似乎不适用于 POST?

用于sage 100 ERP的sData REST API

为啥在使用 Angular http.post 而不是传统的 HTML 表单时会出现 CORS 错误?

在 laravel 中使用 oauth 会出现错误:redirect_uri_mismatch