【问题标题】:Unable to read cookie header with Angular无法使用 Angular 读取 cookie 标头
【发布时间】:2014-04-05 08:54:30
【问题描述】:

我正在处理一个糟糕的问题,但找不到解决方案……也许有人有想法。

我有一个基于sails.js 的rest api,并通过Angular.js 发送一个发布请求——工作正常我得到所有响应数据!

但我无法读取标头 cookie。 cookie 始终为空...

在标题中应该是一个'Set-Cookie'。如果我使用 Rest 工具调用相同的函数,我会得到 cookie 标头。

我正在使用本地主机端口:8000。其余的 api 在端口:1337

$http.post(url, json)
        .success(function(data, status, headers, config) {

            console.log(headers('Server'));
            console.log(headers('Set-Cookie'));
        })
        .error(function(data, status, headers, config) {
          console.log("error");
          console.log("status " +status);
          console.log("status " +angular.toJson(data));
        });

有什么想法吗?

干杯!!

【问题讨论】:

  • 尝试转储headers()。也许没有Set-Cookie 属性,并且标头具有某种标准化名称,例如SetCookie.
  • 不,如果我调用 console.log(headers()); ,我什么也看不到;
  • REST 工具具有不同的访问权限,请检查您的 CORS (developer.mozilla.org/en/docs/HTTP/Access_control_CORS) 属性是否匹配,可能这就是您无法读取标头属性的原因。

标签: angularjs cookies sails.js


【解决方案1】:

首先,您永远不需要在 Javascript 中获取 set-cookie 标头;浏览器会为您处理设置 cookie。如果您想检查 cookie 是否是响应的一部分,最好使用浏览器的开发控制台。

更重要的是,这里的问题是根本不会设置 cookie,因为这是一个跨域 AJAX 请求(不同的端口算作不同的来源)并且您可能还没有设置 CORS Sails 中的设置以允许请求通过。

Sails 中 CORS 的完整文档是 here。开始测试的最简单方法是打开您的/config/cors.js 文件并将allRoutes 设置为true;这将允许所有 CORS 请求不受阻碍地通过,而不管它们的来源或它们试图访问的路线。完成该操作后,您可以根据需要使用更细粒度的设置来锁定访问权限。

请注意,默认情况下,只有来自跨域请求的 very few 响应标头可通过 Javascript 获得,其中 set-cookie 绝对不是!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2017-05-25
    • 2018-06-27
    • 2021-07-06
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    相关资源
    最近更新 更多