TIL/Node.js
Nodejs 에러 | ERR_INVALID_CHAR
홍차23
2019. 12. 31. 22:05
에러>
TypeError [ERR_INVALID_CHAR]: Invalid character in header content ["Set-Cookie"]
문제 발생한 코드>
const http = require('http');
const fs = require('fs');
const url = require('url');
const qs = require('querystring');
const parseCookies = (cookie = '') =>
cookie
.split(';')
.map(v => v.split('='))
.map(([k, ...vs]) => [k, vs.join('=')])
.reduce((acc, [k,v]) => {
acc[k.trim()] = decodeURIComponent(v);
return acc;
}, {});
http.createServer((req,res) => {
const cookies = parseCookies(req.headers.cookie);
if(req.url.startsWith('/login')) {
const {query} = url.parse(req.url);
const {name} = qs.parse(query);
const expires = new Date();
expires.setMinutes(expires.getMinutes() + 5);
res.writeHead(302, {
Location: '/',
'Set-Cookie' : `name=${encodeURIComponent(name)};
Expires=${expires.toGMTString()}; HttpOnly; Path=/`,
});
res.end();
} else if(cookies.name) {
res.writeHead(200, { 'Content-Type' : 'test/html; charset=utf-8'});
res.end(`${cookies.name}님 안녕하세요`);
} else {
fs.readFile('./server4.html', (err,data) => {
if(err) {
throw err;
}
res.end(data);
});
}
})
.listen(8083, () => {
console.log('8083 port waiting');
});
해결방법>
Expires 앞에 줄바꿈을 제거한다.
const http = require('http');
const fs = require('fs');
const url = require('url');
const qs = require('querystring');
const parseCookies = (cookie = '') =>
cookie
.split(';')
.map(v => v.split('='))
.map(([k, ...vs]) => [k, vs.join('=')])
.reduce((acc, [k,v]) => {
acc[k.trim()] = decodeURIComponent(v);
return acc;
}, {});
http.createServer((req,res) => {
const cookies = parseCookies(req.headers.cookie);
if(req.url.startsWith('/login')) {
const {query} = url.parse(req.url);
const {name} = qs.parse(query);
const expires = new Date();
expires.setMinutes(expires.getMinutes() + 5);
res.writeHead(302, {
Location: '/',
'Set-Cookie' : `name=${encodeURIComponent(name)};Expires=${expires.toGMTString()}; HttpOnly; Path=/`,
});
res.end();
} else if(cookies.name) {
res.writeHead(200, { 'Content-Type' : 'test/html; charset=utf-8'});
res.end(`${cookies.name}님 안녕하세요`);
} else {
fs.readFile('./server4.html', (err,data) => {
if(err) {
throw err;
}
res.end(data);
});
}
})
.listen(8083, () => {
console.log('8083 port waiting');
});