@@ -62,7 +62,7 @@ var redirect2HomePage = function({res, httpprefix, serverName,} ) {
62
62
res . status ( 302 ) . send ( `` )
63
63
}
64
64
65
- let getHostFromReq = ( req ) => { //return target
65
+ let getHostFromReq = ( { req, serverName } ) => { //return target
66
66
// url: http://127.0.0.1:8011/https/www.youtube.com/xxx/xxx/...
67
67
let https_prefix = '/https/'
68
68
let http_prefix = '/http/'
@@ -106,6 +106,23 @@ let getHostFromReq = (req) => { //return target
106
106
httpType = 'https'
107
107
}
108
108
}
109
+ let originalHost = ''
110
+ if ( req . headers [ 'cookie' ] ) {
111
+ let cookiesList = req . headers [ 'cookie' ] . split ( ' ' )
112
+ . map ( str => new cookiejar . Cookie ( str ) )
113
+ . map ( cookie => {
114
+ if ( cookie . name === 'ORIGINALHOST' ) {
115
+ originalHost = cookie . value
116
+ }
117
+ } )
118
+ }
119
+ if ( host === '' ) {
120
+ if ( originalHost !== '' ) {
121
+ httpType = originalHost . split ( '/' ) [ 0 ]
122
+ host = originalHost . split ( '/' ) [ 1 ]
123
+ logSave ( `getHostFromReq, use ORIGINALHOST, ${ httpType } ,${ host } ` )
124
+ }
125
+ }
109
126
logSave ( `getHostFromReq, req.url:${ req . url } , referer:${ req . headers [ 'referer' ] } , host:${ host } , httpType:${ httpType } ` )
110
127
return { host, httpType}
111
128
}
@@ -115,7 +132,7 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
115
132
let stream = fs . createWriteStream ( "web-records.csv" , { flags :'a' } )
116
133
let handleRespond = ( { req, res, body, gbFlag} ) => { // text file
117
134
let myRe
118
- let { host, httpType} = getHostFromReq ( req )
135
+ let { host, httpType} = getHostFromReq ( { req, serverName } )
119
136
let location = res . getHeaders ( ) [ 'location' ]
120
137
if ( res . statusCode == '301' || res . statusCode == '302' || res . statusCode == '303' || res . statusCode == '307' || res . statusCode == '308' ) {
121
138
location = locationReplaceMap302 ( { location, serverName, httpprefix, host, httpType} )
@@ -193,7 +210,7 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
193
210
let myRe = new RegExp ( `/http[s]?/${ serverName } .*?/` , 'g' ) // match group
194
211
req . url = req . url . replace ( myRe , '/' )
195
212
196
- let { host, httpType} = getHostFromReq ( req )
213
+ let { host, httpType} = getHostFromReq ( { req, serverName } )
197
214
let target = `${ httpType } ://${ host } `
198
215
logSave ( `router, target:${ target } , req.url:${ req . url } ` )
199
216
return target
@@ -204,7 +221,7 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
204
221
router,
205
222
/*
206
223
pathRewrite: (path, req) => {
207
- let {host, httpType} = getHostFromReq(req)
224
+ let {host, httpType} = getHostFromReq({ req, serverName} )
208
225
let newpath = path.replace(`/https/${host}`, '') || '/'
209
226
logSave(`newpath:${newpath}`)
210
227
return newpath
@@ -233,7 +250,7 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
233
250
} ,
234
251
selfHandleResponse : true , // so that the onProxyRes takes care of sending the response
235
252
onProxyRes : ( proxyRes , req , res ) => {
236
- let { host, httpType} = getHostFromReq ( req )
253
+ let { host, httpType} = getHostFromReq ( { req, serverName } )
237
254
logSave ( `proxyRes.status:${ proxyRes . statusCode } proxyRes.headers:${ JSON . stringify ( proxyRes . headers ) } ` )
238
255
let bodyList = [ ]
239
256
let bodyLength = 0
@@ -361,6 +378,14 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
361
378
return cookie
362
379
} )
363
380
. map ( cookie => cookie . toString ( ) )
381
+ let cookie_originalHost = new cookiejar . Cookie ( )
382
+ cookie_originalHost . name = 'ORIGINALHOST'
383
+ cookie_originalHost . value = `${ httpType } /${ host } `
384
+ cookie_originalHost . domain = `${ serverName } `
385
+ cookie_originalHost . expiration_date = datestr
386
+ cookie_originalHost . path = `/`
387
+ cookie_originalHost . secure = false
388
+ modifiedSetCookieHeaders . push ( cookie_originalHost . toString ( ) )
364
389
proxyRes . headers [ 'set-cookie' ] = modifiedSetCookieHeaders
365
390
Object . keys ( proxyRes . headers ) . forEach ( function ( key ) {
366
391
if ( key === 'content-security-policy' ||
@@ -384,7 +409,9 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
384
409
logSave ( `res.status:${ res . statusCode } res.url:${ res . url } , res.headers:${ JSON . stringify ( res . getHeaders ( ) ) } ` )
385
410
if ( res . statusCode === 404 ) {
386
411
try {
387
- delete res . headers [ 'content-length' ] //remove content-length field
412
+ if ( res . headers && res . headers [ 'content-length' ] ) {
413
+ delete res . headers [ 'content-length' ] //remove content-length field
414
+ }
388
415
redirect2HomePage ( { res, httpprefix, serverName, } )
389
416
} catch ( e ) {
390
417
logSave ( `error: ${ e } ` )
@@ -401,7 +428,7 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
401
428
402
429
let fwdStr = req . headers [ 'X-Forwarded-For' ] || req . headers [ 'x-forwarded-for' ]
403
430
404
- let { host, httpType} = getHostFromReq ( req )
431
+ let { host, httpType} = getHostFromReq ( { req, serverName } )
405
432
for ( let i = 0 ; i < blockedSites . length ; i ++ ) {
406
433
let site = blockedSites [ i ]
407
434
if ( site === host ) {
0 commit comments