This commit is contained in:
zjcqoo 2019-05-22 14:40:44 +08:00
parent 1d314d2f8e
commit 9aeffb4ea4
2 changed files with 33 additions and 65 deletions

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 EtherDream
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -5,13 +5,24 @@ https://zjcqoo.github.io/-----https://www.google.com
(目前仍在更新中,如有问题尝试用隐身模式访问)
# 最近更新
* 2019-05-21 首页静态资源从 CDN 加载
* 2019-05-20 安装脚本更新
* 2019-05-17 常用网站静态资源从 CDN 加载
[查看更多](changelogs)
# 安装
```bash
curl -O https://raw.githubusercontent.com/EtherDream/jsproxy/master/i.sh && bash i.sh
```
如果安装失败,尝试[源码编译安装](docs/compile.md)。
如果安装失败,尝试[手动安装](docs/compile.md)。
# 测试
@ -121,70 +132,6 @@ https://myhost.github.io 'my';
对于有些无法重写的 API例如 `location`,本代理会将代码中字面出现的 `location` 替换成 `__location`,从而将操作转移到自定义对象上。当然对于非字面的情况(例如 `this['lo' + 'cation']`),目前还无法处理。
### 界面和接口分离
参见下文
# CHANGELOG
## v0.0.1
虽然目前仍为概念演示状态,但相比[最初版本](https://github.com/EtherDream/jsproxy/tree/first-ver),有了很大变化:
### 不再使用子域名
使用子域名编码目标域名(例如 gg.jsproxy.tk存在太多缺陷。例如 HTTPS 证书问题DNS 性能和安全问题等。因此目前不再使用子域名,只用固定的域名,目标 URL 放在路径里。例如:
https://zjcqoo.github.io/-----https://www.google.com
当然这也会产生很多新问题,例如无法支持 Cookie、页面之间没有同源策略限制等。
对于 Cookie目前通过 JS 来维护,而不用浏览器原生(当然还有不少细节没实现)。这样的好处是前后端可以分离,前端页面可以放在第三方 Web 服务器上(例如 CDN、GitHub Pages我们的服务器只提供代理接口。
这样一个页面可使用多个服务器的代理接口,并能实现线路切换、负载均衡等效果。
同源策略方面的限制目前暂未实现,因此不要进行登陆等操作,避免隐私泄露。
### 服务端优化
安全改进:由于 Web 页面托管在第三方站点上,自己的服务器无需开启 443 端口,因此也无需 root 运行。同时支持 IP 黑名单功能,防止 SSRF 攻击。
代码改进:接口代理使用固定的 URL参见 `api.conf`),不再使用任意路径,代码干净了很多。
## 支持更多浏览器
相比之前版本只支持 Chrome现在还支持最新的 Safari 和 FireFox。
注意FireFox 隐身模式下不支持 Service Worker只能普通模式访问。
### 提供一个首页
虽然依旧简陋,但比之前好。提供了线路切换、预加载的功能。
# 当前开发中的功能...
## 增加节点切换
目前尝试将服务器分为两种:高级(延时低、带宽小、费用高),低级(延时高、带宽大、费用低)。
浏览器首先访问高级服务器,如果返回的是静态资源且体积较大,服务器只返回资源属性(大小、修改时间、首块哈希等),浏览器随后通过低级服务器获取完整资源;如果获取到的属性和之前不一致(例如 IP 变化导致),再从高级服务器获取完整内容。
这样设计,是为了降低高级服务器的带宽和流量成本,同时充分利用廉价服务器的资源。
目前演示中的低级服务使用的是 ClodeFlare Worker其费用为 100 万次请求 / $0.5,没有带宽和流量限制,但延时较大,适合于体积较大的资源代理;高级服务为阿里轻量云,延时相对较小,上行带宽和流量有限,但下行流量免费且带宽较大,因此合适较小资源的代理,及其较大资源的属性获取。
使用这种方案,理想情况下可以支撑上百人同时观看高清视频。(当然现实中不少视频网站会关联用户 IP导致节点切换失败最终仍走高级服务器难以达到这个数值
未来会尝试进一步细分请求的优先级。例如同样是获取视频的请求,不同的片段范围,其优先级是不同的。当首次打开或者拖动进度时,用户希望能尽快看到内容,这就需要更高的优先级;当视频缓冲足够时,这时延时和稳定性已不再重要,因此可以走更廉价的节点。
当然具体的实现细节目前仍在探索和优化中,本质意义自然是物尽其用。这是一个很有意思的话题,有兴趣的可以交流讨论。
# 类似项目
目前找到的都是传统后端替换 URL 的方案。当然后端替换也有不少优点,例如浏览器兼容性高,甚至低版本的 IE 都可以使用。