Ember应用程序请求Rails应用程序--跨域
Ember App Requests to Rails App -- Cross Domain?
我在同一台服务器上有两个独立的应用程序,一个是ember应用程序,另一个是rails应用程序。现在,我正在本地测试。
我的Ember请求不会发送到rails(localhost:3000)。我似乎不知道这是否发生了,因为它认为这是一个跨域请求。即使它们在同一台服务器上,也会被视为跨域请求吗?如果是这样的话,有没有办法避免这种跨域请求,因为它们在同一台服务器上,而不会影响安全性?还是我需要坚持JSONP?
是的,对不同端口的请求是跨域请求。浏览器正在发出飞行前选项请求(CORS),但没有得到答复。然后它将丢弃原始请求。您需要让服务器使用正确的CORS标头对此OPTIONS请求进行响应。然后浏览器将发出原始请求。
以下是有关CORS的更多信息。
这是我的应用程序控制器的代码:
class V1::ApplicationController < ApplicationController
after_filter :cors_set_access_control_headers, :log_user
# respond to options requests with blank text/plain as per spec
def cors_preflight_check
logger.info ">>> responding to CORS request"
render :text => '', :content_type => 'text/plain'
end
# For all responses in this controller, return the CORS access control headers.
def cors_set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Headers'] = 'X-AUTH-TOKEN, X-API-VERSION, X-Requested-With, Content-Type, Accept, Origin'
headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, DELETE, OPTIONS'
headers['Access-Control-Max-Age'] = "1728000"
end
以及来自routes.rb:
match '/*path' => 'application#cors_preflight_check', :via => :options
还有一个机架插件可以处理这个问题:rack-cors-
你没有说你在哪个平台上运行,但我发现的这种事情的最佳解决方案是磁带
https://github.com/metajack/tape
这将允许您设置一个小的反向代理,并将url映射到rails应用程序,同时为JS提供服务。
不同的端口被安全沙盒视为不同的域,因此,如果您正在为您的ember和rails单独提供服务,则需要一个反向代理。
我想你有几个选项,这取决于你的应用程序是在开发模式还是生产模式下运行,它们是:
仅限开发模式
- 如果您使用
chrome
或chromium
作为开发浏览器,则可以使用标志--args --disable-web-security
启动它
开发和生产模式
- 如前所述,使用
jsonp
- 添加到您的服务器配置跨源请求头
Access-Control-Allow-Origin: *
,因为您正在使用rails。请查看此处 - 在同一域下服务您的应用程序&仅在路径
http://myhost.com/app1
、http://myhost.com/app2
等上的端口变化
希望能有所帮助。
相关文章:
- 需要使用谷歌应用程序脚本列出谷歌域下的所有网站
- 在Derby.js中包含跨应用程序的样式
- web应用程序中的跨浏览器会话
- 只需添加一个'允许跨来源请求'到我的节点应用程序工作
- 从跨域对Iframe应用样式
- 如何将 camanjs 用于我的 wix 应用程序绕过跨域问题
- 从数据库中获取配置设置,以便在 Angular 中跨应用程序共享
- 自定义右键单击UI上下文菜单(复制、粘贴、剪切)用于整个应用程序(所有网页)跨所有浏览器而非单个网页
- 在Ember应用程序中加载外部域脚本
- 将 Web 应用程序升级为跨浏览器兼容的 Document.all 问题
- 在多个域上使用Facebook应用程序ID
- 跨域 Jquery JSONP POST to Rails 应用程序
- 使用POST从PhoneGap,移动jQuery应用程序跨域脚本检测成功的html表单提交
- 无法在Angular应用程序中跨域POST数据
- Ember应用程序请求Rails应用程序--跨域
- 使用跨域页面在chrome上运行phonegap应用程序
- 如何在我的移动应用程序(cordova)上启用跨域资源共享,它连接到API(在Yii中)
- 由于CORS错误,无法跨域ajax发布到Heroku上的Rails应用程序
- 不同应用程序在不同端口上的跨域消息传递
- Jquery跨域Ajax - Windows通用HTML应用程序