代理服务器接收目标服务器的响应并将其返回给客户端。
const express = require('express'); const httpProxy = require('http-proxy'); const cookieParser = require('cookie-parser'); const app = express(); const proxy = httpProxy.createProxyServer(); // 使用 cookie-parser 中间件解析 Cookie app.use(cookieParser()); // 代理请求的路由 app.all('/proxy/*', (req, res) => { // 假设请求的目标是 https://api.example.com/data const targetUrl = `https://api.example.com/${req.params[0]}`; // 代理请求的选项,传递 Cookie 和其他必要的请求头 const options = { target: targetUrl, changeOrigin: true, // 使目标服务器看到的请求 Host 是目标服务器而不是代理服务器的 Host headers: { 'Cookie': req.headers.cookie || '' // 将客户端发送的 Cookie 传递给目标服务器 } }; // 将请求代理到目标服务器 proxy.web(req, res, options, (error) => { console.error(`Proxy request to ${targetUrl} failed:`, error); res.status(500).send('Proxy request failed'); }); }); // 堆代码 duidaima.com // 代理服务启动 app.listen(3000, () => { console.log('Proxy server is running on http://localhost:3000'); });cookie-parser 用于解析请求中的 Cookie 并传递给目标服务器。
changeOrigin: true 确保目标服务器认为请求直接来自客户端,而非代理服务器。
fetch('http://localhost:3000/proxy/data', { method: 'GET', credentials: 'include' // 保持 Cookie 在请求中传递 }) .then(response => response.json()) .then(data => console.log(data)) .catch(err => console.error('Request failed', err));credentials: 'include' 用于确保浏览器将 Cookie 一并发送到代理服务器。
const express = require('express'); const cookieParser = require('cookie-parser'); const app = express(); const port = 8080; // 假设目标服务器运行在 8080 端口 // 使用 cookie-parser 中间件解析 Cookie app.use(cookieParser()); // 模拟的用户数据 const users = { 'session123': { id: 1, name: '前端界', email: 'xiaoming@163.com' }, 'session456': { id: 2, name: '芝士', email: 'xiaohong@163.com' } }; // 处理 /data 路由的请求 app.get('/data', (req, res) => { const sessionCookie = req.cookies.sessionId; // 获取请求中的 Cookie,假设叫做 sessionId if (!sessionCookie || !users[sessionCookie]) { // 如果没有 Cookie 或者 Cookie 不正确,返回 401 未授权 return res.status(401).json({ error: 'Unauthorized: Invalid session' }); } // 如果 Cookie 有效,返回该用户的数据 const userData = users[sessionCookie]; res.json({ message: 'Data fetched successfully', user: userData }); }); // 启动目标服务器 app.listen(port, () => { console.log(`Target server running on http://localhost:${port}`); });目标服务器通过 cookie-parser 获取 sessionId,并返回对应的用户数据。
如果 Cookie 无效,则返回 401 未授权错误。