javascript - 访问控制公开 header 在 Safari 5.1.7 中不起作用

标签 javascript angularjs safari cors

所以我一直在为我当前的项目使用 angularjs,并使用 CORS 向服务器发出 http 请求。我注意到为了使跨域调用正常工作,服务器需要使用

配置它的 cors 设置
Access-Control-Allow-Origin
Access-Control-Allow-Credentials

一切正常。但实际上服务器需要对身份验证进行多层验证,因此当用户首次登录时,服务器返回一个 JSESSIONID 并且客户端需要将自定义 header 响应存储到 session 中。但是我似乎无法访问JSESSIONID。因此服务器使用

重新配置 CORS 设置
Access-Control-Expose-Headers

现在一切正常。 但是 当我在 safari 上测试它时,不是我发出和使用的每个 $http 请求

$cookieStore.put("JSESSIONID", headers("JSESSIONID"));

要在我的客户端浏览器上设置一个 session ,它总是返回一个 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

最佳答案

很确定为时已晚,但无论如何。

我最近遇到了同样的问题,发现 Safari 5.1 需要在 Access-Control-Expose-Headers 下指定的 header 小写。 即

JSESSIONID: F1E104CA46A46E7BF7614D9191BAD4CD
Access-Control-Expose-Headers: Jsessionid

不起作用。

JSESSIONID: F1E104CA46A46E7BF7614D9191BAD4CD
Access-Control-Expose-Headers: JSESSIONID

也不行。 这样做:

jsessionid: F1E104CA46A46E7BF7614D9191BAD4CD
Access-Control-Expose-Headers: jsessionid

关于javascript - 访问控制公开 header 在 Safari 5.1.7 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056099/

相关文章:

javascript - 显示隐藏内容(维基百科风格)

javascript - 同步读取文件并转换为字节数组

angularjs - 如何在angularjs中按降序排列对象数组?

javascript - MP4 视频 - Safari 在控制台中显示 "Unhandled Promise Rejection: [object DOMError]"

php - 除了发送参数之外,是否有传递给浏览器的信息可以告诉网站是什么应用程序访问了它?

javascript - 比较并匹配 2 个 csv 文件

javascript - "new Dog"或 "new Dog()"

javascript - 在 AngularJS 中的多个项目之间共享代码

angularjs - 迷失在 Controller 、模块和 clicktoOpen 上

javascript - 提交表单时,设置了与 <URL> 处的跨站点资源关联的 cookie,但没有设置 `SameSite` 属性