Invalid character in header content [“Set-Cookie”]
来源:7-3 cookie用于登录验证
锅里的芒果
2020-07-28
我的router/user.js里面代码:
if(method === 'GET' &&path === '/api/user/login'){
const {username, password} = req.query
console.log(username)
const reslut = login(username, password)
return reslut.then((obj)=>{
console.log(obj)
if(obj.username){
//操作cookie,给用户写入cookie (path改为 根目录,所有的路由都会生效)
res.setHeader('Set-Cookie', `username=${obj.username};path=/`);
return new SuccessModel('登录成功')
} else{
return new ErrorModel('登录失败,账号密码不匹配')
}
})
}
控制台报错:
(node:9540) UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_CHAR]: Invalid character in header content [“Set-Cookie”]
at ServerResponse.setHeader (_http_outgoing.js:521:3)
我看了和老师写的是一样的呢,它说我设置了一个无效header, 的这是什么原因报错呢?
3回答
-
我不是蜗牛
2021-08-16
以下测试可行
设置时:
const cookBuf = `username=${encodeURIComponent(data.username)}; path=/`;
res.setHeader('Set-Cookie', cookBuf);
读取时:
const cookie = decodeURIComponent(req.headers.cookie || '');
10 -
qq_一咻_0
2020-11-07
倒腾了半夜也没找到方案,其实是http协议的Header头有字符限制,下图是stackoverflow的解答,http的header字符集支持US-ASCII子集的字符集,故设置中文是'utf8'时就会报上面错误。
故解决方案:
把字符串转成base64即可this.cookies.set('test', new Buffer('我是koajs').toString('base64'))
new Buffer(str, 'base64').toString();//str是base64编码的字符串
00 -
双越
2020-07-29
报错的详细截图给我
012021-05-20
相似问题