所以我一直在为当前的项目使用angularjs,并使用CORS向服务器发出http请求。我注意到,为了使跨域调用工作,服务器需要使用
配置它的cors设置Access-Control-Allow-Origin
Access-Control-Allow-Credentials
一切正常。但实际上服务器需要对身份验证进行多层验证,因此当用户首次登录时,服务器返回 JSESSIONID ,客户端需要将自定义头响应存储到会话中。但似乎我无法访问 JSESSIONID 。所以服务器使用
重新配置CORS设置Access-Control-Expose-Headers
现在一切正常。 但是不是我在safari上测试它时,我已经制作并使用的每个$ http请求
$cookieStore.put("JSESSIONID", headers("JSESSIONID"));
要在我的客户端浏览器上设置会话,它始终返回null
。但在其他浏览器上它工作正常。
在完成一些研究后,我发现this网站上显示 CORS 调用在Safari中不支持,尤其是版本 5.1.7
但是我不能太确定,因为我不知道我是否错过了什么,所以这里是我的$ http请求代码
$http({
'method':'GET',
'url':'example.com/method',
'withCredentials':true,
'headers': {
'Content-Type': 'application/json'
}
}).success(function(data, response, headers, status) {
$cookieStore.put("JSESSIONID", headers("JSESSIONID"));
console.log($cookieStore.get("JSESSIONID")); //it always returns with a null in Safari
});
这是使用谷歌浏览器的服务器响应的示例
Status Code:200 OK
Response Headers
view source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:9000
Access-Control-Expose-Headers:Jsessionid
Content-Type:application/json
Date:Thu, 25 Jun 2015 16:39:04 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
Vary:Origin
Request Headers
view source
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,id;q=0.6,ms;q=0.4
authTokens:e8ea4bc3-efea-4aef-a845-a7d1f0003b83
Connection:keep-alive
Content-Type:application/json
Cookie:JSESSIONID=F1E104CA46A46E7BF7614D9191BAD4CD
Host:deal01.customers.luna.net:9091
JSESSIONID:F1E104CA46A46E7BF7614D9191BAD4CD
Origin:http://localhost:9000
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36
答案 0 :(得分:0)
非常确定为时已晚,但无论如何。
我最近遇到了同样的问题,并且能够发现Safari 5.1希望在Access-Control-Expose-Headers
小写下指定标题。
即。
JSESSIONID: F1E104CA46A46E7BF7614D9191BAD4CD
Access-Control-Expose-Headers: Jsessionid
不起作用。
JSESSIONID: F1E104CA46A46E7BF7614D9191BAD4CD
Access-Control-Expose-Headers: JSESSIONID
也不起作用。 这样做:
jsessionid: F1E104CA46A46E7BF7614D9191BAD4CD
Access-Control-Expose-Headers: jsessionid