【问题标题】:$http GET doesn't send JSESSIONID in chrome but works on firefox angularjs$http GET 不会在 chrome 中发送 JSESSIONID 但适用于 firefox angularjs
【发布时间】:2016-10-27 21:41:57
【问题描述】:

所以我有这个代码

$http({
     'method': 'GET',
         'url': 'http://www.example.com',
         'withCredentials': true,
     headers: {
         'Content-type': 'application/json'
     }
 }).
 success(function (data, response, headers, status) {

});

这将返回 JSON 记录数组,并且 http 请求使用凭据,这是一个 JSESSIONID,用于对后端的每次连续调用。

问题是,它可以在 Firefox 上运行,但不能在 chrome 上运行。因此,当我已经将 withCredentials 设置为 true 时,Firefox 确实发送了包含 JSESSIONID 但不包含 chrome 的 cookie

为什么会这样?

【问题讨论】:

  • 您尝试调试请求,确定“withCredentials”标头发送正确吗?
  • 我如何确保这一点? @NarekMamikonyan
  • 当您打开 chrome dev tools 网络部分时,您可以看到请求标头等。
  • yap 实际上这是凭据“Access-Control-Allow-Credentials:true”的响应标头,但它不像 firefox 那样发送 JSESSIONID
  • 供您参考 chrome 给出此错误 'XMLHttpRequest 无法加载 example.com/orders。该请求被重定向到“example.com/auth/login”,这对于需要预检的跨域请求是不允许的。 ' @NarekMamikonyan

标签: javascript angularjs http jsessionid


【解决方案1】:

这是 CORS 异常,当您尝试从另一个域加载数据时出现错误 more about CORS

还检查我的回答如何在 Angular js 上启用 CORS,但不幸的是,您的服务器也必须启用 CORS。

more about it

【讨论】:

  • 实际上服务器已经为每种方法设置为 CORS 启用.. 你知道从角度方面到启用 CORS 吗???
  • 检查我的回答中的链接stackoverflow.com/questions/24598187/…
  • 我使用了您的选项,但我认为它不起作用.. $httpProvider 配置与 $http 相同吗? @NarekMamikonyan
  • 您确定您的服务器使用相同的标头响应什么?
  • yap 我很确定.. 不同的是,chrome 不会像 firefox 那样发送 JSESSIONID 凭据...奇怪,因为我已经将带有凭据的访问控制设置为 true...@NarekMamikonyan
猜你喜欢
  • 2014-11-19
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2014-11-17
相关资源
最近更新 更多