Improvement: proxy server (#1225)

* added log for proxy server

* fix: not proxy client server request

* fix: added try catch for proxy server

* fix: added disallow reponse headers
This commit is contained in:
nyagami
2024-10-16 15:02:44 +07:00
committed by GitHub
parent 326d5414e9
commit 9380542719
2 changed files with 49 additions and 23 deletions
+47 -23
View File
@@ -4,7 +4,7 @@ import httpProxy from 'http-proxy';
const CLIENT_HOST = 'http://localhost:3000'; const CLIENT_HOST = 'http://localhost:3000';
const proxy = httpProxy.createProxyServer({}); const proxy = httpProxy.createProxyServer({});
const disAllowedHeaders = [ const disAllowedRequestHeaders = [
'sec-ch-ua', 'sec-ch-ua',
'sec-ch-ua-mobile', 'sec-ch-ua-mobile',
'sec-ch-ua-platform', 'sec-ch-ua-platform',
@@ -15,8 +15,20 @@ const disAllowedHeaders = [
'pragma', 'pragma',
]; ];
const disAllowResponseHeaders = ['link', 'set-cookie', 'set-cookie2'];
const proxyRequest = (req, res) => { const proxyRequest = (req, res) => {
const _url = new URL(req.url); const _url = new URL(req.url);
console.log('\x1b[36m', '----------------');
console.log(
`Making proxy request - at ${new Date().toLocaleTimeString()}
url: ${_url.href}
headers:`,
);
Object.entries(req.headers).forEach(([name, value]) => {
console.log('\t', '\x1b[32m', name + ':', '\x1b[37m', value);
});
console.log('\x1b[36m', '----------------');
proxy.web(req, res, { proxy.web(req, res, {
target: _url.origin, target: _url.origin,
selfHandleResponse: true, selfHandleResponse: true,
@@ -52,10 +64,13 @@ proxy.on('proxyRes', function (proxyRes, req, res) {
return false; return false;
} }
for (const _header in proxyRes.headers) { for (const _header in proxyRes.headers) {
res.setHeader(_header, proxyRes.headers[_header]); if (!disAllowResponseHeaders.includes(_header)) {
res.setHeader(_header, proxyRes.headers[_header]);
}
}
for (const _header in disAllowedRequestHeaders) {
delete proxyRes.headers[_header];
} }
delete proxyRes.headers['set-cookie'];
delete proxyRes.headers['set-cookie2'];
res.setHeader('Access-Control-Allow-Origin', CLIENT_HOST); res.setHeader('Access-Control-Allow-Origin', CLIENT_HOST);
res.setHeader('Access-Control-Allow-Credentials', true); res.setHeader('Access-Control-Allow-Credentials', true);
proxyRes.on('data', function (chunk) { proxyRes.on('data', function (chunk) {
@@ -101,26 +116,35 @@ http
if (path === 'cookies') { if (path === 'cookies') {
cookiesHandler(req, res); cookiesHandler(req, res);
} else { } else {
const _url = new URL(path); try {
for (const _header of disAllowedHeaders) { const _url = new URL(path);
delete req.headers[_header]; for (const _header in req.headers) {
} if (
for (const _header in req.headers) { req.headers[_header]?.includes('localhost') ||
if (req.headers[_header]?.includes('localhost')) { disAllowedRequestHeaders.includes(_header)
delete req.headers[_header]; ) {
delete req.headers[_header];
}
}
req.headers['sec-fetch-mode'] = 'cors';
if (temp_cookies) {
req.headers['cookie'] = temp_cookies;
}
req.headers.host = _url.host;
req.url = _url.toString();
res.statusCode = 200;
if (req.method === 'OPTIONS') {
res.end();
} else {
proxyRequest(req, res);
}
} catch (err) {
console.log('\x1b[31m', '----------ERRROR----------');
console.error(err);
console.log('\x1b[31m', '----------ERRROR----------');
if (!res.closed) {
res.end();
} }
}
req.headers['sec-fetch-mode'] = 'cors';
if (temp_cookies) {
req.headers['cookie'] = temp_cookies;
}
req.headers.host = _url.host;
req.url = _url.toString();
res.statusCode = 200;
if (req.method === 'OPTIONS') {
res.end();
} else {
proxyRequest(req, res);
} }
} }
}) })
+2
View File
@@ -15,6 +15,8 @@ import 'protobufjs';
const { fetch: originalFetch } = window; const { fetch: originalFetch } = window;
window.fetch = async (...args) => { window.fetch = async (...args) => {
const [resource, config] = args; const [resource, config] = args;
if (resource.toString().includes('localhost'))
return await originalFetch(resource, config);
const _res = await originalFetch('http://localhost:3001/' + resource, { const _res = await originalFetch('http://localhost:3001/' + resource, {
...config, ...config,
credentials: 'include', credentials: 'include',