使用Rest-Angular和rails进行跨域脚本编写

时间:2014-08-28 07:42:48

标签: angularjs cors restangular

我正在使用Rest-Angular和Rails构建应用程序。 Angular在localhost:9000上运行,其中Rails在3000上。由于一些跨域问题,我无法发送POST请求。在发布之前我已经尝试过这些东西了:

1。)使用rails gem更改网址,如下所示

 config.middleware.use Rack::Cors do
    allow do
      origins 'localhost:9000'
      resource '*', :headers => :any, :methods => [:get, :post, :options, :delete]
    end
   end

2。)更改请求标题

baseAccounts.post(newAccount,{},{'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
            'Access-Control-Allow-Headers': 'accept,content-type,X-Token,programDigest'});

我能够发送GET请求,但POST仍然无法正常工作。

我上次尝试的标题

Request URL:http://0.0.0.0:3000/singup
Request Headers
Provisional headers are shown
Accept:application/json, text/plain, */*
Access-Control-Allow-Headers:accept,content-type,X-Token,programDigest
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:*
Content-Type:application/json;charset=UTF-8
Origin:http://localhost:9000
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Request Payloadview parsed
{"first_name":"Rajan","last_name":"Chaudhary","email":"dfgd@fgfd.com"}

,错误是

XMLHttpRequest cannot load http://0.0.0.0:3000/singup. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access. 

1 个答案:

答案 0 :(得分:2)

这称为跨源资源共享,它是一种允许跨不同URL来源共享数据的方法(不出所料)。浏览器实现保护以停止跨站点脚本(XSS),这是您当前遇到的问题。可以在此处找到更多信息:http://enable-cors.org

你接近它的工作。它是需要使用Access-Control-Allow-Origin: *标头进行响应的服务器,以便它可以正常工作。

具体而言,每个资源(每个端点)都需要接受OPTIONS请求,该请求以200 OK和以下响应头响应(而不是允许所有方法只能为资源指定一些允许的方法,例如,仅GET

  • 最低限度:Access-Control-Allow-Origin: *
  • 方法:Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS

更多信息here

值得注意的是,这实际上规避了浏览器和Angular提供的跨源资源共享保护的全部内容。部署站点应指定确切的允许来源,而不是*