Node.js输出原始Request内容
有时候希望能直观地看到一个HTTP请求发送到服务器之后长什么样子,以便抓包和调试。平时可以预备一个现成的简单程序,以备不时之需。
直接模式
const http = require('http')
http.createServer((req, res) => {
res.setHeader('Content-Type', 'text/plain')
res.write(`${req.method} ${req.url} HTTP/${req.httpVersion}\n`)
for (let i = 0; i < req.rawHeaders.length; i += 2) {
res.write(`${req.rawHeaders[i]}: ${req.rawHeaders[i + 1]}\n`)
}
res.write('\n')
req.on('data', (chunk) => {
res.write(chunk)
})
req.on('end', () => {
res.end()
})
}).listen(8080)
console.log('Raw server is listening on port 8080...')
使用方法:保存为index.js,然后直接用Node.js启动即可。请求时,只要是http://IP:8080,可以发任意path和内容,浏览器会如实地把请求(和Header)内容给打印出来。
TODO 代理模式
代理模式可以更加灵活,例如只拦截和展示特定请求,其余一律放行。
使用方法:TODO