CN111814085A - 基于JavaScript hook的新型WEB在线代理方法 - Google Patents
基于JavaScript hook的新型WEB在线代理方法 Download PDFInfo
- Publication number
- CN111814085A CN111814085A CN202010662640.4A CN202010662640A CN111814085A CN 111814085 A CN111814085 A CN 111814085A CN 202010662640 A CN202010662640 A CN 202010662640A CN 111814085 A CN111814085 A CN 111814085A
- Authority
- CN
- China
- Prior art keywords
- com
- url
- client
- proxy
- agent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45529—Embedded in an application, e.g. JavaScript in a Web browser
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种基于JavaScript hook的新型WEB在线代理方法,假设用户访问WEB在线代理网站是a.com,并在代理网站页面上访问目标网站b.com,选用客户端的Service Worker的API来实现客户端的JavaScript hook;具体包括以下步骤:当用户首次访问代理网站a.com时,不管访问什么路径,都返回包含Service Worker安装脚本的页面;Service Worker在客户端安装成功后接管当前站点产生的所有HTTP(S)请求,将非a.com请求的Url进行替换使得其他流量都经过代理服务器;后端代理服务器利用openresty进行反向代理,并处理返回头解决跨域的问题。本发明采用了JavaScript hook可以异步拦截请求的特性,解决了目前WEB在线代理对于一些动态生成的Url无法识别以及代理服务器CPU被严重消耗的问题。
Description
技术领域
本发明涉及计算机网络和数据通信技术领域,特别是一种基于JavaScript hook的新型WEB在线代理方法。
背景技术
随着互联网的高速发展,互联网的网络环境越来越复杂,于是就出现了WEB在线代理技术来解决网络的畅通性,传统的WEB在线代理基本都是在服务端对静态可识别的完整Url替换达到代理目的,对于一些动态生成的Url无法识别,在网页的源代码中无法找到请求的地址,即使一些基于AJAX的在线代理技术能通过重写JS原生的API来替换动态生成的Url,但仍然存在增加服务器负担以及无法识别例如CSS等资源中Url请求的问题。
网页里的URL有千奇百怪的存在形式,可存在于HTML、CSS、JS甚至是动态加载的JSON、XML等资源中,因此后端只处理HTML是不够的,还必须处理各种文本资源,这对服务器是个不小的开销。除了内容处理,其实还有很多额外开销。互联网上的文本资源大多都是压缩传输,而压缩的数据是无法直接处理的,因此还得先解压,最后处理完的数据,还得再压缩回去。一来一往,消耗不少CPU。当然也可以不压缩,但这又会增加流量开销。像过去的gzip压缩开销尚可接受,而如今流行的brotli压缩开销非常大。假如用户频繁访问大体积的文本资源,代理服务器的CPU将严重消耗。因此需要一种先进的技术来解决目前WEB在线代理对于一些动态生成的Url无法识别以及代理服务器CPU被严重消耗的问题。
发明内容
为解决现有技术中存在的问题,本发明的目的是提供一种基于JavaScript hook的新型WEB在线代理方法,本发明采用了JavaScript hook可以异步拦截请求的特性,解决了目前WEB在线代理对于一些动态生成的Url无法识别以及代理服务器CPU被严重消耗的问题。
为实现上述目的,本发明采用的技术方案是:一种基于JavaScript hook的新型WEB在线代理方法,假设用户访问WEB在线代理网站是a.com,并在代理网站页面上访问目标网站b.com,选用客户端的Service Worker的API来实现客户端的JavaScript hook;具体包括以下步骤:
步骤1、当用户首次访问代理网站a.com时,不管访问什么路径,都返回包含Service Worker安装脚本的页面;
步骤2、Service Worker在客户端安装成功后接管当前站点产生的所有HTTP(S)请求,将非a.com请求的Url进行替换使得其他流量都经过代理服务器;
步骤3、后端代理服务器利用openresty进行反向代理,并处理返回头解决跨域的问题。
作为一种优选的实施方式,Service Worker的安装过程如下:
客户端的Service Worker通过安装页面的navigator.serviceWorker.register()进行注册,然后再进行安装和激活,至此Service Worker安装完毕,接管当前站点产生的所有HTTP(S)请求。
作为另一种优选的实施方式,当前站点产生的所有HTTP(S)请求包括浏览器地址栏的访问请求。
作为另一种优选的实施方式,在步骤2中将非a.com请求的Url进行替换使得其他流量都经过代理服务器具体为:
当用户在代理服务器上访问目标网站b.com时,Service Worker在fetch事件中拦截到访问目标网站b.com请求,然后将请求的Url替换成a.com/?---b.com/?p=c的Url,并通过await fetch()的API访问替换后的Url。
作为另一种优选的实施方式,在步骤3中,所述后端代理服务器采用openresty,利用lua脚本在access_by_lua_file请求访问阶段从请求a.com/?---b.com/?p=c的Url中提取出b.com/?p=c并将其赋值给proxy_pass,然后在header_filter_by_lua_file阶段对返回头进行同源策略设置操作。
作为另一种优选的实施方式,Service Worker收到返回的数据后对返回头进行设置,以防因为跨域的原因导致客户端无法访问b.com,然后将b.com的内容返回给客户端完成本次代理过程。
下面对本发明作进一步的说明:
本发明利用了JavaScript hook可以异步拦截请求的特性,让代理替换Url的步骤在客户端进行;JavaScript hook技术允许JS拦截当前站点产生的所有HTTP(S)请求(甚至包括浏览器地址栏的访问请求),其本质是在函数被调用前,对函数进行替换,使其能控制返回结果,相当于浏览器内部的反向代理。利用本发明中的JavaScript hook技术,可在浏览器发起GET或者POST等一切网络请求的时候将这个操作劫持下来,然后将网络请求的Url进行修改。所以原始网页中的URL无论是绝对路径还是相对路径,无论出现在HTML还是CSS,都能在网络请求发出之前进行拦截,然后转发到自己的代理服务器,让代理服务器完成余下的代理工作。
另外,到了通过JS hook技术来重写Url相关的API,使得代理对网页脚本透明。传统的在线代理大多数是针对HTML、JS、CSS、JSON等静态资源中的Url进行替换,忽视了动态Url以及JS里面获取Url的API。例如a.com反向代理b.com,如果b.com有个页面通过document.domain来获取Url,如果不做任何处理的情况下这个API将返回a.com,这可能导致页面的某些业务逻辑出现问题。为了缓解这个问题,本发明通过在页面头部注入一个JS脚本,用以重写绝大部分获取Url的API,使得页面中通过API来获取到的Url依然是原始Url。这样原本b.com的网页现在运行于a.com站点下,页面脚本调用例如document.domain等API获得的仍是b.com的URL。对于一些为了保证网页的安全性和网页制作者的一定控制权而无法重写的API,例如location,本发明将会用形如__location的名字来替换location,从而将操作转移到自定义对象上;在重写的API函数中将原始请求的Url(b.com/?p=c)替换成形如a.com/?---b.com/?p=c的Url,即加上a.com/?---这个前缀,这样原始网页弹出的任何Url都会经过服务器进行代理转发。后端代理服务器采用openresty,利用lua脚本在access_by_lua_file请求访问阶段从请求的Url(a.com/?---b.com/?p=c)中提取出原始的Url(b.com/?p=c)并将其赋值给proxy_pass,然后在header_filter_by_lua_file阶段对返回头进行同源策略等设置操作。JavaScript hook能让替换网址的操作在客户端进行,同时后端服务器只需做HTTP(HTTPS)请求转发,不修改内容,因此极大减少了服务端CPU资源的开销。
本发明的有益效果是:
1、解决动态Url的问题:本发明利用JavaScript hook技术允许JS拦截当前站点产生的所有HTTP(S)请求(甚至包括浏览器地址栏的访问请求)的特性解决了以往WEB在线代理无法处理CSS等资源中Url请求的问题。
2、API虚拟化:本发明利用JavaScript能重写绝大部分与Url相关的原生API函数和属性的特性,使得原本b.com的网页现在运行于a.com站点下,页面脚本调用例如document.domain等API获得的仍是b.com的URL,这样不会造成网站业务逻辑错误的同时对原始网页来说代理是透明的。
3、降低服务端开销:本发明利用JavaScript hook的特性,能让JS拦截下网页产生的请求,并且能返回自定义内容,这使得大部分的内容都可以在客户端上完成处理,服务端只做转发流量的工作。极大的降低了服务端CPU性能的消耗。
附图说明
图1为本发明实施例的流程框图。
具体实施方式
下面结合附图对本发明的实施例进行详细说明。
实施例
如图1所示,一种基于JavaScript hook的新型WEB在线代理方法,包括以下步骤:
(1)假设WEB在线代理网站是a.com,用户在代理网站上访问目标网站b.com。选用Service Worker的API来实现客户端的JavaScript hook。
(2)因为Service Worker本身需通过脚本安装,同时Service Worker是后台进程,一旦安装可长期运行,即使网页关闭它仍在运行。所以只需让用户首次访问时安装一次就可以。之后整个站点所有流量都被Service Worker接管。最终所有的内容处理,都可以由JS来实现,服务端只需纯粹转发数据,甚至都不用考虑解压缩,从而大幅降低CPU开销。所以当用户首次访问a.com时,不管访问什么路径,始终返回安装页面。
(3)客户端的Service Worker通过安装页面的navigator.serviceWorker.register()进行注册,然后再进行安装和激活,至此Service Worker安装完毕。
(4)当用户在代理网站上访问b.com时,Service Worker会在fetch这个事件中拦截到这个请求,然后将请求的Url替换成形如a.com/?---b.com/?p=c的Url。并通过awaitfetch()这个API访问替换后的Url。
(5)后端代理服务器采用openresty,利用lua脚本在access_by_lua_file请求访问阶段从请求的Url(a.com/?---b.com/?p=c)中提取出b.com/?p=c并将其赋值给proxy_pass,然后在header_filter_by_lua_file阶段对返回头进行同源策略等设置操作。
(6)Service Worker收到返回的数据后对返回头进行设置,以防因为跨域的原因导致客户端无法访问b.com。然后将b.com的内容返回给客户端完成本次代理过程。
以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
Claims (6)
1.一种基于JavaScript hook的新型WEB在线代理方法,其特征在于,假设用户访问WEB在线代理网站是a.com,并在代理网站页面上访问目标网站b.com,选用客户端的ServiceWorker的API来实现客户端的JavaScript hook;具体包括以下步骤:
步骤1、当用户首次访问代理网站a.com时,不管访问什么路径,都返回包含ServiceWorker安装脚本的页面;
步骤2、Service Worker在客户端安装成功后接管当前站点产生的所有HTTP(S)请求,将非a.com请求的Url进行替换使得其他流量都经过代理服务器;
步骤3、后端代理服务器利用openresty进行反向代理,并处理返回头解决跨域的问题。
2.根据权利要求1所述的基于JavaScript hook的新型WEB在线代理方法,其特征在于,Service Worker的安装过程如下:
客户端的Service Worker通过安装页面的navigator.serviceWorker.register()进行注册,然后再进行安装和激活,至此Service Worker安装完毕,接管当前站点产生的所有HTTP(S)请求。
3.根据权利要求2所述的基于JavaScript hook的新型WEB在线代理方法,其特征在于,当前站点产生的所有HTTP(S)请求包括浏览器地址栏的访问请求。
4.根据权利要求1所述的基于JavaScript hook的新型WEB在线代理方法,其特征在于,在步骤2中将非a.com请求的Url进行替换使得其他流量都经过代理服务器具体为:
当用户在代理服务器上访问目标网站b.com时,Service Worker在fetch事件中拦截到访问目标网站b.com请求,然后将请求的Url替换成a.com/?---b.com/?p=c的Url,并通过await fetch()的API访问替换后的Url。
5.根据权利要求4所述的基于JavaScript hook的新型WEB在线代理方法,其特征在于,在步骤3中,所述后端代理服务器采用openresty,利用lua脚本在access_by_lua_file请求访问阶段从请求a.com/?---b.com/?p=c的Url中提取出b.com/?p=c并将其赋值给proxy_pass,然后在header_filter_by_lua_file阶段对返回头进行同源策略设置操作。
6.根据权利要求5所述的基于JavaScript hook的新型WEB在线代理方法,其特征在于,Service Worker收到返回的数据后对返回头进行设置,以防因为跨域的原因导致客户端无法访问b.com,然后将b.com的内容返回给客户端完成本次代理过程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010662640.4A CN111814085A (zh) | 2020-07-10 | 2020-07-10 | 基于JavaScript hook的新型WEB在线代理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010662640.4A CN111814085A (zh) | 2020-07-10 | 2020-07-10 | 基于JavaScript hook的新型WEB在线代理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111814085A true CN111814085A (zh) | 2020-10-23 |
Family
ID=72842661
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010662640.4A Pending CN111814085A (zh) | 2020-07-10 | 2020-07-10 | 基于JavaScript hook的新型WEB在线代理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111814085A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112788103A (zh) * | 2020-12-25 | 2021-05-11 | 江苏省未来网络创新研究院 | 一种基于nginx+lua解决同应用多实例web代理访问冲突的方法 |
CN116049582A (zh) * | 2023-03-31 | 2023-05-02 | 深圳依时货拉拉科技有限公司 | WebView监控方法、计算机设备和计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101753606A (zh) * | 2008-12-03 | 2010-06-23 | 北京天融信科技有限公司 | 一种实现web反向代理的方法 |
CN108287737A (zh) * | 2017-07-13 | 2018-07-17 | 广州市动景计算机科技有限公司 | Service Worker启动方法、装置及电子设备 |
CN108989390A (zh) * | 2018-06-19 | 2018-12-11 | 北京智明星通科技股份有限公司 | 用户请求转发方法及装置、反向代理服务器和计算机可读存储介质 |
CN109067914A (zh) * | 2018-09-20 | 2018-12-21 | 星环信息科技(上海)有限公司 | Web服务的代理方法、装置、设备及存储介质 |
CN111367596A (zh) * | 2018-12-25 | 2020-07-03 | 阿里巴巴集团控股有限公司 | 一种实现业务数据处理的方法及装置和客户端 |
-
2020
- 2020-07-10 CN CN202010662640.4A patent/CN111814085A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101753606A (zh) * | 2008-12-03 | 2010-06-23 | 北京天融信科技有限公司 | 一种实现web反向代理的方法 |
CN108287737A (zh) * | 2017-07-13 | 2018-07-17 | 广州市动景计算机科技有限公司 | Service Worker启动方法、装置及电子设备 |
CN108989390A (zh) * | 2018-06-19 | 2018-12-11 | 北京智明星通科技股份有限公司 | 用户请求转发方法及装置、反向代理服务器和计算机可读存储介质 |
CN109067914A (zh) * | 2018-09-20 | 2018-12-21 | 星环信息科技(上海)有限公司 | Web服务的代理方法、装置、设备及存储介质 |
CN111367596A (zh) * | 2018-12-25 | 2020-07-03 | 阿里巴巴集团控股有限公司 | 一种实现业务数据处理的方法及装置和客户端 |
Non-Patent Citations (1)
Title |
---|
韦王强等: "基于Progressive Web Apps的兼职云服务系统", 《电脑与信息技术》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112788103A (zh) * | 2020-12-25 | 2021-05-11 | 江苏省未来网络创新研究院 | 一种基于nginx+lua解决同应用多实例web代理访问冲突的方法 |
CN112788103B (zh) * | 2020-12-25 | 2022-08-02 | 江苏省未来网络创新研究院 | 一种基于nginx+lua解决同应用多实例web代理访问冲突的方法 |
CN116049582A (zh) * | 2023-03-31 | 2023-05-02 | 深圳依时货拉拉科技有限公司 | WebView监控方法、计算机设备和计算机可读存储介质 |
CN116049582B (zh) * | 2023-03-31 | 2023-07-04 | 深圳依时货拉拉科技有限公司 | WebView监控方法、计算机设备和计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8972461B2 (en) | Dynamic content assembly on edge-of network servers in a content delivery network | |
US7970940B1 (en) | Domain name system lookup latency reduction | |
US7496497B2 (en) | Method and system for selecting web site home page by extracting site language cookie stored in an access device to identify directional information item | |
JP5805867B2 (ja) | 遠隔ブラウジングセッション管理 | |
CN105095280B (zh) | 一种浏览器缓存方法和装置 | |
US9471704B2 (en) | Shared script files in multi-tab browser | |
WO2017113963A1 (zh) | 一种静态化页面的处理方法及装置 | |
US10521485B1 (en) | Measuring page value | |
US20140006487A1 (en) | Methods for making ajax web applications bookmarkable and crawable and devices thereof | |
JP5945060B2 (ja) | 出力機能分割システム | |
CN102438045A (zh) | Web页面的预取方法、系统以及访问web页面的方法 | |
US8234402B2 (en) | Method and apparatus for request routing | |
CN103383687A (zh) | 一种页面处理方法和装置 | |
CN111814085A (zh) | 基于JavaScript hook的新型WEB在线代理方法 | |
CN104615597A (zh) | 浏览器中清除缓存文件的方法、装置和系统 | |
CN113536168B (zh) | 组件处理方法及设备 | |
JP5039946B2 (ja) | クライアント装置およびサーバ装置の間の通信を中継する技術 | |
JP2014521149A (ja) | 遠隔ブラウジングセッション管理 | |
US9087134B2 (en) | Systems and methods for decorating web pages | |
US10003630B2 (en) | Method, apparatus and computer program product for managing static uniform resource locator access | |
CN106326213A (zh) | 一种对web站点进行翻译的方法及装置 | |
US12028434B2 (en) | Generating early hints informational responses at an intermediary server | |
US11716405B1 (en) | System and method for identifying cache miss in backend application | |
CN111756744B (zh) | H5用户的识别方法、装置、设备及存储介质 | |
CN110505258A (zh) | 网页加载及响应方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201023 |
|
RJ01 | Rejection of invention patent application after publication |