【问题标题】:Is it possible to get the Set-Cookie value from an HTTP response header in JavaScript?是否可以从 JavaScript 中的 HTTP 响应标头获取 Set-Cookie 值?
【发布时间】:2011-11-04 01:50:28
【问题描述】:

我正在使用jQuery's ajax() method 进行一些异步服务器调用,并希望捕获由于会话超时而导致调用失败的情况。

通过查看本例中的响应标头,我发现它们包含

Set-Cookie: SMSESSION=LOGGEDOFF

这似乎是一个非常可靠的测试。但是在传递给 jQuery 的 error 回调的 XMLHttpRequest 对象上调用 getAllResponseHeaders 显然会返回一个空字符串,我无法找出任何其他获取该标头信息的方法。

这可能吗?

【问题讨论】:

  • @quantumSoup:好吧,看起来它是重复的,所以我将关闭这个...只是为了澄清一下,正确的答案是你可以的' t 访问响应标头?另一个问题的答案之一提到了getAllResponseHeaders,并获得了 17 个赞。
  • @zzzz:我也有类似的想法……但似乎直到 回调被调用后才会发生;我说得对吗?我想在这种情况下我可以在complete 回调中做某种setTimeout 交易......
  • 根据本规范 (w3.org/TR/XMLHttpRequest/#the-getresponseheader-method),getAllResponseHeaders() 将返回除 Set-Cookie 标头之外的所有标头。您必须通过cookie接口才能获取cookie。
  • @jfriend00:可悲的是,我所看到的似乎是:(1)getAllResponseHeaders() 正在返回""(可能 jQuery 正在这样做?); (2) 有问题的 cookie 实际上并没有被浏览器更新。虽然我可以说 cookie 是安全的并且没有过期,但我对 HTTP 的理解还不够好,无法知道原因。在任何情况下,我都无法从响应标头中获取Set-Cookie 的值,这很令人沮丧,因为这才是我真正关心的(即,如果服务甚至 尝试 将 cookie 设置为 LOGGEDOFF这就是我想知道的)。你知道这是为了安全吗?

标签: javascript jquery ajax http-headers xmlhttprequest


【解决方案1】:

如果文档来自相同的域和路径,请使用 document.cookie 接口 如果 cookie 设置了 http-only 属性,则无法访问

【讨论】:

    【解决方案2】:

    如果您阅读 W3 XHR 规范,您会发现它们不允许您通过 getAllResponseHeaders('Set-Cookie') 调用访问 set-cookie 响应标头。

    参见 4.7.3 getResponseHeader() 方法:

    要点 3:“如果 header 是 Set-Cookie 或 Set-Cookie2 的不区分大小写匹配,则返回 null。”

    http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-method

    jfriend00 也在上面的 cmets 中留下了这个回复,但我认为这个问题可以使用合法的答案。

    【讨论】:

      猜你喜欢
      • 2014-02-26
      • 2021-10-21
      • 2015-02-10
      • 1970-01-01
      • 2019-06-10
      • 2011-06-07
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多