function setRequestParams (req, opts) { const target = req.rocky.options.target || opts.target const url = parseUrl(target) const params = setupReq(opts.ssl || {}, opts, req) params.hostname = url.hostname params.port = url.port const forwardHost = opts.forwardHost if (typeof forwardHost === 'string') { params.headers.host = forwardHost } else if (forwardHost) { params.headers.host = url.host } if ((req.method === 'DELETE' || req.method === 'OPTIONS') && !req.headers['content-length']) { params.headers['content-length'] = '0' } if (opts.replayOriginalBody && req._originalBodyLength) { params.headers['content-length'] = req._originalBodyLength } return params }
function cacheResolver(req) { var target = url.parse(options.proxy.target); var outgoing = setupOutgoing({}, _.assign(options.proxy, { target: target }), req); outgoing = _.pick(outgoing, [ // https://nodejs.org/docs/v4.4.2/api/url.html 'protocol', 'slashes', 'auth', 'hostname', 'host', 'port', 'path', 'pathname', 'query', 'search', 'hash' ]); target = _.omit(target, [ 'path', 'pathname' ]); // log('proxy target', target); // log('outgoing', outgoing); outgoing = _.defaults(outgoing, target, { protocol: outgoing.port === 80 ? 'http' : outgoing.port === 443 ? 'https' : undefined, pathname: outgoing.pathname || outgoing.path }); // convert back into URL object outgoing = url.parse(url.format(outgoing)); return _.get(outgoing, 'href'); }