我在服务器侧导轨和前端只使用html 并从html页面通过ajax访问ruby控制器。
我的html文件部署在tomcat上,我正在进行跨域ajax请求
我在浏览器中的响应包含所有详细信息的完整标题。 仍然没有在浏览器中设置cookie。
Access-Control-Allow-Credentials:true
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin: localhost:8080
Access-Control-Max-Age:1728000
Cache-Control:max-age=0, private, must-revalidate
Connection:close
Content-Type:application/json; charset=utf-8
ETag:"08499f242d03267cf0777a855aacf33e"
Server:thin 1.6.2 codename Doc Brown
Set-Cookie:request_method=POST; path=/
Set-Cookie:remember_token=oKk0zsjd4BpyXC_39k0rUA; path=/; expires=Wed, 26 Jul 2034 15:05:51 -0000
Vary:Origin
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-Request-Id:111f78ff-0dc8-4926-b301-a7e58f655619
X-Runtime:0.280800
X-UA-Compatible:chrome=1
X-XSS-Protection:1; mode=block
如果有人知道这种情况,请建议我......
提前致谢
答案 0 :(得分:1)
你有一个有趣的设置。我想知道是什么阻止您在rails实例之上托管整个站点。默认情况下,您的用户需要启用一些浏览器安全设置。如果我使用该网站,这会让我感到不适。尽管如此,听起来你已经在rails应用程序上启用了CORS。我假设你至少使用jQuery 1.5+。您在ajax调用中需要的两个设置是crossDomain: true
和xhrFields : { withCredentials : true }
。你的ajax应该是这样的:
$.ajax({
'url' : 'your_cross_domain_url',
'data' : {},
'type' : 'POST',
'crossDomain : true,
'xhrFields' : {
'withCredentials' : true
},
success: function(data){
//do stuff
},
error: function(data) {
// do other stuff
}
});
此外,您的用户可能需要启用此设置:
Chrome>设置>高级设置>隐私>内容设置>阻止第三方Cookie和网站数据
Safari>偏好>隐私>阻止Cookie和其他网站数据>从未
其他浏览器>不确定