我正在使用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.
答案 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提供的跨源资源共享保护的全部内容。部署站点应指定确切的允许来源,而不是*
。