如何在AngularJS 1.6中显式携带Cookie发送GET请求
嘿,针对你这个手动显式带Cookie发请求的需求,我给你梳理了具体的实现方法,适配AngularJS 1.6的版本:
1. 直接在请求头里添加Cookie字段
你不需要依赖浏览器自动发送,直接在$http的配置里把Cookie头写进去就行——可以直接写死值,也可以从$cookies里取之前存好的JSESSIONID,示例代码如下:
// 记得在控制器里注入$cookies和$http这两个服务哦 angular.module('你的应用模块名').controller('你的控制器名', ['$cookies', '$http', function($cookies, $http) { // 先把JSESSIONID存到Cookie里(可选,如果你后续还要用到这个值的话) $cookies.put('JSESSIONID', 'lu5xxkdqgjk5qpv07ufhvln3'); // 发送带显式Cookie的GET请求 $http({ url: "http://10.11.0.11:4440/api/21/projects", method: "GET", headers: { 'Accept': 'application/json', // 重点:这里手动添加Cookie请求头 'Cookie': 'JSESSIONID=' + $cookies.get('JSESSIONID') // 要是不想从$cookies取,直接写死也可以:'Cookie': 'JSESSIONID=lu5xxkdqgjk5qpv07ufhvln3' }, // 划重点!如果是跨域请求,必须加这个配置,不然浏览器会拦着不让发Cookie withCredentials: true }).then(function(response) { // 请求成功后的处理逻辑 console.log('搞定啦!返回的数据:', response.data); }).catch(function(error) { // 请求失败的话可以在这里排查问题 console.error('哎呀请求失败了:', error); }); }]);
2. 几个必须注意的坑
- 跨域的话服务器要配合:如果你的前端页面和API不在同一个域名下,服务器端必须配置
Access-Control-Allow-Credentials: true,而且Access-Control-Allow-Origin不能设成*,得指定你前端的具体域名,不然浏览器会直接拒绝发送Cookie。 - 多个Cookie怎么加:要是需要带多个Cookie,用分号加空格隔开就行,比如
'Cookie': 'JSESSIONID=xxx; 另一个Cookie名=yyy'。 withCredentials不能忘:跨域场景下这个配置是刚需,它告诉浏览器“我要在跨域请求里带凭证(包括Cookie)”。
3. 为啥要手动发?
一般来说登录成功后浏览器会自动带Cookie,但如果你遇到这些场景,手动显式设置就很必要:
- 跨域但服务器没配置好CORS凭证支持
- 需要模拟不同用户的请求,手动指定特定的Cookie值
- 浏览器的Cookie存储被禁用或者受限了
内容的提问来源于stack exchange,提问作者Anubha Gupta
相关产品推荐
相关产品推荐

