Skip to content

Commit dcde239

Browse files
committed
added ORIGINALHOST cookie to fix host="" issue
1 parent fe14d56 commit dcde239

File tree

3 files changed

+38
-10
lines changed

3 files changed

+38
-10
lines changed

Proxy.js

+34-7
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ var redirect2HomePage = function({res, httpprefix, serverName,} ) {
6262
res.status(302).send(``)
6363
}
6464

65-
let getHostFromReq = (req) => { //return target
65+
let getHostFromReq = ({req, serverName}) => { //return target
6666
// url: http://127.0.0.1:8011/https/www.youtube.com/xxx/xxx/...
6767
let https_prefix = '/https/'
6868
let http_prefix = '/http/'
@@ -106,6 +106,23 @@ let getHostFromReq = (req) => { //return target
106106
httpType = 'https'
107107
}
108108
}
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+
}
109126
logSave(`getHostFromReq, req.url:${req.url}, referer:${req.headers['referer']}, host:${host}, httpType:${httpType}`)
110127
return {host, httpType}
111128
}
@@ -115,7 +132,7 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
115132
let stream = fs.createWriteStream("web-records.csv", {flags:'a'})
116133
let handleRespond = ({req, res, body, gbFlag}) => { // text file
117134
let myRe
118-
let {host, httpType} = getHostFromReq(req)
135+
let {host, httpType} = getHostFromReq({req, serverName})
119136
let location = res.getHeaders()['location']
120137
if (res.statusCode == '301' || res.statusCode == '302' || res.statusCode == '303' ||res.statusCode == '307' || res.statusCode == '308') {
121138
location = locationReplaceMap302({location, serverName, httpprefix, host, httpType})
@@ -193,7 +210,7 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
193210
let myRe = new RegExp(`/http[s]?/${serverName}.*?/`, 'g') // match group
194211
req.url = req.url.replace(myRe, '/')
195212

196-
let {host, httpType} = getHostFromReq(req)
213+
let {host, httpType} = getHostFromReq({req, serverName})
197214
let target = `${httpType}://${host}`
198215
logSave(`router, target:${target}, req.url:${req.url}`)
199216
return target
@@ -204,7 +221,7 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
204221
router,
205222
/*
206223
pathRewrite: (path, req) => {
207-
let {host, httpType} = getHostFromReq(req)
224+
let {host, httpType} = getHostFromReq({req, serverName})
208225
let newpath = path.replace(`/https/${host}`, '') || '/'
209226
logSave(`newpath:${newpath}`)
210227
return newpath
@@ -233,7 +250,7 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
233250
},
234251
selfHandleResponse: true, // so that the onProxyRes takes care of sending the response
235252
onProxyRes: (proxyRes, req, res) => {
236-
let {host, httpType} = getHostFromReq(req)
253+
let {host, httpType} = getHostFromReq({req, serverName})
237254
logSave(`proxyRes.status:${proxyRes.statusCode} proxyRes.headers:${JSON.stringify(proxyRes.headers)}`)
238255
let bodyList = []
239256
let bodyLength = 0
@@ -361,6 +378,14 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
361378
return cookie
362379
})
363380
.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())
364389
proxyRes.headers['set-cookie'] = modifiedSetCookieHeaders
365390
Object.keys(proxyRes.headers).forEach(function (key) {
366391
if (key === 'content-security-policy' ||
@@ -384,7 +409,9 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
384409
logSave(`res.status:${res.statusCode} res.url:${res.url}, res.headers:${JSON.stringify(res.getHeaders())}`)
385410
if (res.statusCode === 404) {
386411
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+
}
388415
redirect2HomePage({res, httpprefix, serverName,})
389416
} catch(e) {
390417
logSave(`error: ${e}`)
@@ -401,7 +428,7 @@ let Proxy = ({blockedSites, urlModify, httpprefix, serverName, port, cookieDomai
401428

402429
let fwdStr = req.headers['X-Forwarded-For'] || req.headers['x-forwarded-for']
403430

404-
let {host, httpType} = getHostFromReq(req)
431+
let {host, httpType} = getHostFromReq({req, serverName})
405432
for (let i=0; i<blockedSites.length; i++) {
406433
let site = blockedSites[i]
407434
if (site === host) {

README.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,11 @@ user browser +-------------->+ siteproxy +-------> wikipedia
5454
1. 注册一个heroku账户: https://www.heroku.com/
5555
2. 没有github账户的话, 注册一个github账户,fork本repo
5656
3. 在heroku的控制台里面创建一个应用, 且绑定到你刚才fork的repo上, 会得到一个域名类似的域名:your-domain-name.herokuapp.com
57-
4. 在github上修改你刚fork的repo, 将procfile里的域名修改为你的新域名:
57+
4. 在heroku的'Deloy'页面, 点击'Enable Automatic Deploys'按钮
58+
5. 在github上修改你刚fork的repo, 将procfile里的域名修改为你的新域名(记得不要加https前缀):
5859
"web: herokuAddr=siteproxy.herokuapp.com npm run start"
5960
====> "web: herokuAddr=your-domain-name.herokuapp.com npm run start"
60-
5. 现在可以在浏览器里面访问你的新域名了: https://your-domain-name.herokuapp.com
61+
6. 现在可以在浏览器里面访问你的新域名了: https://your-domain-name.herokuapp.com
6162
```
6263
## 部署到vps服务器
6364
```

index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ <h1 class="logo">
840840
</a>
841841
</div>
842842
<div class="col-md-3 col-sm-4 col-xs-6">
843-
<a href="/http/news.creaders.net/headline/" class="card-link" target="_blank">
843+
<a href="/https/news.creaders.net/breaking/" class="card-link" target="_blank">
844844
<div class="card-tit">万维读者</div>
845845
</a>
846846
</div>

0 commit comments

Comments
 (0)