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 || '');


1
0

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编码的字符串






0
0

双越

2020-07-29

报错的详细截图给我

0
1
慕九州4451910
老师,就是需要使用Buffer.from(str).toString('base64')转一下编码格式。不然就报错.具体实施如下: let userCookie = Buffer.from(`userid=${userId}; path=/; httpOnly; expires=${getCookieExpires()}`).toString('base64') 然后: res.setHeader('Set-Cookie', userCookie)
2021-05-20
共1条回复

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4051 学习 · 2006 问题

查看课程