diff --git a/lib/https/index.js b/lib/https/index.js index 66123a628..39106809e 100644 --- a/lib/https/index.js +++ b/lib/https/index.js @@ -4,6 +4,7 @@ var url = require('url'); var socks = require('socksv5'); var EventEmitter = require('events').EventEmitter; var util = require('../util'); +var extend = require('util')._extend; var config = require('../config'); var rules = require('../rules'); var pluginMgr = require('../plugins'); @@ -195,22 +196,15 @@ function handleWebsocket(socket, clientIp, clientPort, callback) { //TODO: 暂时支持reqHeaders://(value),该头部设置主要给插件whistle.nohost //TODO: whistle v2.0将全面支持对websocket的操作 - var ruleKey; - var ruleValue; + var headersIsModified; var reqHeaders = parseReqHeaders(_rules.reqHeaders); if (reqHeaders) { reqHeaders = util.lowerCaseify(reqHeaders); - ruleKey = reqHeaders['x-whistle-rule-key']; - if (ruleKey) { - headers['x-whistle-rule-key'] = ruleKey; - } - ruleValue = reqHeaders['x-whistle-rule-value']; - if (ruleValue) { - headers['x-whistle-rule-value'] = ruleValue; - } + extend(headers, reqHeaders); + headersIsModified = Object.keys(reqHeaders).length; } - reqSocket.write(socket.getBuffer((isInternalProxy || ruleKey || ruleValue + reqSocket.write(socket.getBuffer((isInternalProxy || headersIsModified || plugin || matchedUrl || _rules.hostname) ? headers : null, matchedUrl ? options.path : null)); var transform = util.getEventTransform(proxy, 'wsRequest', fullUrl);