You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaScript设置Header中Cookie报错:Refused to set unsafe header "Cookie"

嘿,我一眼就揪出问题所在了——你手动在请求头里设置Cookie字段的操作,触发了浏览器的安全限制,这和你有没有加withCredentials: true没关系哦。

为什么会报错?

浏览器的XMLHttpRequest规范明确禁止JavaScript代码手动设置Cookie请求头,这是为了防止恶意脚本篡改Cookie信息带来的安全风险。withCredentials: true的作用是让浏览器自动携带当前域名下的Cookie到跨域请求中,而不是允许你手动去构造这个请求头。

你的代码问题点

看这段代码:

headers2 ['Cookie'] = document.cookieMyApp;

这就是报错的直接原因,而且你设置Cookie的方式也不规范——document.cookieMyApp不是标准操作Cookie的方式,正确的应该用document.cookie来设置和读取。

修正方案

  1. 移除手动设置的Cookie请求头
    删掉headers2 ['Cookie'] = document.cookieMyApp;这一行,让浏览器自动处理Cookie的携带。

  2. 正确设置Cookie
    把你设置Cookie的代码改成标准写法,比如:

    // 正确设置Cookie,注意domain和path要匹配目标请求的域名
    document.cookie = "cookie=Somethin here as cookie; path=/; domain=your-target-domain.com";
    
  3. 确保跨域配置正确(如果是跨域请求)
    如果你的请求是跨域的,服务器端必须同时满足两个条件:

    • 设置Access-Control-Allow-Credentials: true响应头
    • 设置Access-Control-Allow-Origin为具体的请求域名(不能是*

修改后的代码示例

$scope.myAppsLoginResponse = JSON.stringify(response.data, null, 3);
var dataC = JSON.parse($scope.myAppsLoginResponse);
// 正确设置Cookie
document.cookie = "cookie=Somethin here as cookie; path=/; domain=your-target-domain.com";
var userId = dataC.user_id;
var thePath = '/thePath';
var theURL = 'https://theUrl';

var headers2 = {};
headers2 ['Accept-Language'] = 'es-ES';
headers2 ['Authorization'] = 'Basic Z2743ASasdh23Q=';

var param = {};
param ['userId'] = userId;

var req2 = {
    method: 'GET',
    url: theURL + thePath,
    headers: headers2,
    params: param,
    xhrFields: {
        withCredentials: true
    }
};

这样调整后,浏览器就会自动把你设置的Cookie携带到请求中,不会再出现那个安全报错啦。

内容的提问来源于stack exchange,提问作者Arm144

火山引擎 最新活动