1

I am a beginner to node js and this is my first post in here so apologies if this is a stupid question.

The problem I need to solve is to change information in an HTTPS server response before it hits the client. The reason is that my my client (Im developing a GARMIN sports watch application) cannot read the server response as the body data format differs from the content_type as defined in the response header. I have no means of impacting the server code and on the client I am stuck as well, Garmin has acknowledged it should be fixed but have not put it on priority.

I guess that leaves me with having to implement my own http proxy that I can connect in between the client and server to change either the header or the data format in the server response.

I have browsed around a bit and also played around a bit with node-http-proxy but I am not sure what is the best solution approach. Basically, the SERVER expects HTTPS comms, and preferably I also want secured comms between the PROXY and the CLIENT (since they will exchange user credentials).

I guess my first question is if this is a possible use case:

CLIENT -> (HTTPS_POST_req) -> PROXY -> (HTTPS_POST_req) -> SERVER SERVER -> (HTTPS_resp) -> PROXY -> (modified_HTTPS_resp) -> CLIENT

I took a quick shot at it using node-http-proxy sample code but got stuck. What I did was to create an http server on localhost and a proxy server that would proxy the request to SERVER.

const http      = require('http');
const httpProxy = require('http-proxy');
const proxy     = httpProxy.createProxyServer({});

http.createServer(function(req, res) {
    console.log('incoming request');
    console.log('URL:' + req.url);
    console.log('Method:' + req.method);
    console.log('Headers:' + JSON.stringify(req.headers));
    proxy.web(req, res, { target:'SERVER ADDRESS HERE' });
}).listen(8888, () => {
  console.log("Waiting for requests...");
});

From the console I can see the incoming request and also read the url, headers and method but then after a short while I get this:

Error: connect ECONNREFUSED 127.0.0.1:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) {
  errno: 'ECONNREFUSED',
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 80
}

I have no idea why something want to connect to localhost on port 80.

Perhaps this approach will never work for HTTPS/SSL traffic? For instance, do I have to setup my own server certificate to do this or can node-http-proxy handle it "under the hood"? Need a bit of help, please.

//Fredrik

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.