当前位置: 首页 > 面试题库 >

Angularjs $ http在响应中似乎不了解“ Set-Cookie”

艾国安
2023-03-14
问题内容

我有一个带有Passport模块的Node.js Express REST
API,用于身份验证。登录方法(GET)在标题中返回cookie。当我从Chrome调用它时,它工作正常,我的Cookie已在浏览器中设置。

但是,如果我通过Angularjs中的$ http调用它,则不会设置cookie。

Set-Cookie:connect.sid=s%3Ad7cZf3DSnz-IbLA_eNjQr-YR.R%2FytSJyd9cEhX%2BTBkmAQ6WFcEHAuPJjdXk3oq3YyFfI; Path=/; HttpOnly

如您在上面所看到的,Set-Cookie位于http服务响应的标题中。

也许HttpOnly可能是此问题的根源?如果是,我该如何更改?这是我的明确配置:

app.configure(function () {
    app.use(allowCrossDomain);
    app.use(express.bodyParser());
    app.use(express.cookieParser())
    app.use(express.session({ secret: 'this is a secret' }));
    app.use(flash());
    //passport init
    app.use(passport.initialize());
    app.use(passport.session());
    app.set('port', process.env.PORT || 8080);
});

谢谢您的帮助


问题答案:

确保将$ http请求配置为使用凭据。从XHR文档中:

https://developer.mozilla.org/zh-
CN/docs/HTTP/Access_control_CORS

XMLHttpRequest和访问控制公开的最有趣的功能是能够识别HTTP
Cookie和HTTP身份验证信息的“凭证”请求。默认情况下,在跨站点XMLHttpRequest调用中,浏览器将不发送凭据。调用XMLHttpRequest对象时,必须设置一个特定的标志。

您可以使用options对象设置凭据的使用,请参阅

http://docs.angularjs.org/api/ng.$http

例:

$http({withCredentials: true, ...}).get(...)


 类似资料:
  • 对于某些HTTP请求,我收到“非HTTP响应消息:连接超时:连接”,因此我尝试将连接/响应超时值设置为2分钟(这超过了失败HTTP请求所需的连接时间)。为此,我更新了“HTTP 请求默认值”,并将 120000 添加为连接和响应超时。 但是,当我再次运行测试时,HTTP请求仍然给出了相同的错误。示例结果如下- 看起来我在HTTP请求中设置的超时值默认值在这里没有被使用。我还尝试在jmeter.pr

  • 我希望能够创建一个自定义的AngularJS服务,当其数据对象为空时发出HTTP“GET”请求,并在成功时填充数据对象。 下一次调用此服务时,我希望绕过再次发出HTTP请求的开销,而是返回缓存的数据对象。 这可能吗?

  • 我正试图在我的测试环境中部署一个基于3个节点的: 1个名称节点(主节点:172.30.10.64) 2个数据节点(slave1:172.30.10.72和slave2:172.30.10.62) 我在namenode中配置了主属性文件,在datananodes中配置了从属性文件。 主持人: hdfs站点。xml: 核心站点。xml: yarn-site.xml: mapred-site.xml:

  • 问题内容: 我希望能够创建一个自定义AngularJS服务,该服务在其数据对象为空时发出HTTP“获取”请求,并在成功时填充该数据对象。 下次调用此服务时,我想绕过再次发出HTTP请求的开销,而是返回缓存的数据对象。 这可能吗? 问题答案: Angular的$ http 内置了一个缓存。根据文档: cache – {boolean | Object} – 用$ cacheFactory创建的布尔值

  • 我想知道在REST API中应该如何响应。 有效示例: 以上是一个有效的请求,当前我的HTTP状态为200,有一个JSON响应

  • 我正在开发一个客户端基于AngularJS的应用程序,服务器端基于我的API(Tomcat+Jersey for WS)的Java。 我的API的某些路径受到限制,如果用户没有会话,则返回的响应状态为401。在客户端,拦截401个http状态以将用户重定向到登录页面。 用户通过身份验证后,我将在服务器端创建一个会话 null 问题是cookie从不放在客户端。当我检查localhost域的cook