CN113992749B - 一种基于go语言的http反向代理方法及系统 - Google Patents

一种基于go语言的http反向代理方法及系统 Download PDF

Info

Publication number
CN113992749B
CN113992749B CN202111171520.5A CN202111171520A CN113992749B CN 113992749 B CN113992749 B CN 113992749B CN 202111171520 A CN202111171520 A CN 202111171520A CN 113992749 B CN113992749 B CN 113992749B
Authority
CN
China
Prior art keywords
rule
http
module
data
modifying
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.)
Active
Application number
CN202111171520.5A
Other languages
English (en)
Other versions
CN113992749A (zh
Inventor
陈伟
杨继伟
赵美如
江燕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Cloud Information Technology Co Ltd
Original Assignee
Inspur Cloud Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur Cloud Information Technology Co Ltd filed Critical Inspur Cloud Information Technology Co Ltd
Priority to CN202111171520.5A priority Critical patent/CN113992749B/zh
Publication of CN113992749A publication Critical patent/CN113992749A/zh
Application granted granted Critical
Publication of CN113992749B publication Critical patent/CN113992749B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明公开了一种基于go语言的http反向代理方法及系统,属于计算机软件领域;所述的方法具体步骤如下:S1接受调用端发来的http请求,并把http请求封装成req对象;S2从req对象中的header中获取token数据,检查该token数据是否符合校验规则;S3从规则库查询目标服务器地址,修改http请求参数;S4将http请求发送到目标服务器并接受http响应报文;S5根据规则修改http相应报文,并返回至调用端;发明可以根据用户需要定义个性化操作,针对用户配置http请求和http响应报文中的参数,配置信息存放到数据库中,配置后无需重启即可生效。

Description

一种基于go语言的http反向代理方法及系统
技术领域
本发明公开一种基于go语言的http反向代理方法及系统,涉及计算机软件技术领域。
背景技术
反向代理指以代理服务器接受外部客户端的连接请求,然后将请求转发给内部的服务器,并将从服务器上得到的结果返回给外部的客户端,此时代理服务器对外就表现为一个反向代理服务器。
现有技术中可以实现反向代理的软件有很多,像nginx、HAProxy、apache等,他们通过配置方式能实现高性能的http反向代理。
现有的技术不能根据业务需要实现自定义个性化操作。像请求进行权限控制,根据用户修改代理参数,修改完配置无需重启等操作。
故现发明一种基于go语言的http反向代理方法及系统,以解决上述问题。
发明内容
本发明针对现有技术的问题,提供一种基于go语言的http反向代理方法及系统,所采用的技术方案为:一种基于go语言的http反向代理方法,所述的方法具体步骤如下:
S1接受调用端发来的http请求,并把http请求封装成req对象;
S2从req对象中的header中获取token数据,检查该token数据是否符合校验规则;
S3从规则库查询目标服务器地址,修改http请求参数;
S4将http请求发送到目标服务器并接受http响应报文;
S5根据规则修改http相应报文,并返回至调用端。
所述S2从req对象中的header中获取token数据,检查该token数据是否符合校验规则的具体步骤如下:
S201如果不符合校验规则,则拒绝继续执行并返回对应错误;
S202如果符合校验规则,则继续执行。
所述S3从规则库查询目标服务器地址,修改http请求参数的具体步骤如下:
S301将设置的规则数据保存在数据库中;
S302从req对象中获取header、body、url等数据,根据规则数据,修改其中的信息并赋值到outReq对象中。
所述S301将设置的规则数据保存在数据库中的具体步骤包括:
S3011数据库保存对header的操作;
S3012数据库保存对url、http状态码的操作;
S3013数据库保存对body的增加、删除、修改属性的操作。
所述S4将http请求发送到目标服务器并接受http响应报文的具体步骤如下:
S401声明transport,根据规则,生成新的url地址;
S402使用transport.RoundTrip对象把outReq对象发送到目标服务器,并接受返回的res对象。
所述S5根据规则修改http相应报文,并返回至调用端的具体步骤如下:
S501把res对象数据赋值给rw对象;
S502赋值过程中,根据查出的规则数据,修改http响应数据的头信息、body体信息和状态码;
S503利用反向代理服务器把rw对象作为响应数据返回给调用端。
一种基于go语言的http反向代理系统,所述的系统具体包括请求封装模块、请求校验模块、参数修改模块、规则设置模块和报文返回模块:
请求封装模块:接受调用端发来的http请求,并把http请求封装成req对象;
请求校验模块:从req对象中的header中获取token数据,检查该token数据是否符合校验规则;
参数修改模块:从规则库查询目标服务器地址,修改http请求参数;
规则设置模块:将http请求发送到目标服务器并接受http响应报文;
报文返回模块:根据规则修改http相应报文,并返回至调用端。
所述请求校验模块具体包括校验错误模块和校验符合模块:
校验错误模块:如果不符合校验规则,则拒绝继续执行并返回对应错误;
校验符合模块:如果符合校验规则,则继续执行。
所述参数修改模块具体包括规则保存模块和信息处理模块:
规则保存模块:将设置的规则数据保存在数据库中;
信息处理模块:从req对象中获取header、body、url等数据,根据规则数据,修改其中的信息并赋值到outReq对象中。
本发明的有益效果为:本发明通过go语言实现http反向代理,对http请求鉴权,过滤不符合要求的请求,读取http请求中的目的主机地址,根据设置的主机地址与内容服务器地址的对应关系,进行代理跳转‘该方法包括:从客户端接受http请求,然后验证请求是否有权限,如果有权限,从规则库查询要请求的目标服务器的url地址,修改http请求参数,发送到目标服务器并接受响应数据,然后根据规则修改响应数据,最后返回响应数据给客户端;本发明可以根据用户需要定义个性化操作,针对用户配置http请求和http响应报文中的参数,配置信息存放到数据库中,配置后无需重启即可生效;
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明方法的流程图;图2是本发明系统的结构示意图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
实施例一:
一种基于go语言的http反向代理方法,所述的方法具体步骤如下:
S1接受调用端发来的http请求,并把http请求封装成req对象;
S2从req对象中的header中获取token数据,检查该token数据是否符合校验规则;
S3从规则库查询目标服务器地址,修改http请求参数;
S4将http请求发送到目标服务器并接受http响应报文;
S5根据规则修改http相应报文,并返回至调用端;
本发明方法通过go语言实现http反向代理,对http请求鉴权,过滤不符合要求的请求,读取http请求中的目的主机地址,根据设置的主机地址与内容服务器地址的对应关系,进行代理跳转‘该方法包括:从客户端接受http请求,然后验证请求是否有权限,如果有权限,从规则库查询要请求的目标服务器的url地址,修改http请求参数,发送到目标服务器并接受响应数据,然后根据规则修改响应数据,最后返回响应数据给客户端;本发明可以根据用户需要定义个性化操作,针对用户配置http请求和http响应报文中的参数,配置信息存放到数据库中,配置后无需重启即可生效;
进一步的,所述S2从req对象中的header中获取token数据,检查该token数据是否符合校验规则的具体步骤如下:
S201如果不符合校验规则,则拒绝继续执行并返回对应错误;
S202如果符合校验规则,则继续执行;
对到达的http请求进行校验,校验是否合法。如果合法,则继续执行,如果不合法,则拒绝通过并直接返回状态码是401的http响应,流程结束。!校验方式为对http请求的header里携带的用户token信息验证,验证其token信息中的用户是否合法,token信息是否过期;
token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密;
进一步的,所述S3从规则库查询目标服务器地址,修改http请求参数的具体步骤如下:
S301将设置的规则数据保存在数据库中;
S302从req对象中获取header、body、url等数据,根据规则数据,修改其中的信息并赋值到outReq对象中;
token中解析出用户信息,根据用户信息从规则库中查询用户需要执行的规则信息,如果一个操作既定义了针对该用户的规则1也定义了针对所有用户的规则2,则只返回针对该用户的规则1,不返回规则2;如果一个操作没有定义针对该用户的规则,定义了针对所有用户的规则3,则返回规则3;如果一个操作没有定义规则,则该操作无需修改;
进一步的,所述S301将设置的规则数据保存在数据库中的具体步骤包括:
S3011数据库保存对header的操作;
S3012数据库保存对url、http状态码的操作;
S3013数据库保存对body的增加、删除、修改属性的操作;
由于http请求报文和http响应报文中都有header、body信息,所以在对header、body的规则中会有一个标记,标记该规则是作用在http请求报文或者http响应报文中的;
进一步的,所述S4将http请求发送到目标服务器并接受http响应报文的具体步骤如下:
S401声明transport,根据规则,生成新的url地址;
S402使用transport.RoundTrip对象把outReq对象发送到目标服务器,并接受返回的res对象;
设置的规则数据会保存在数据库中,所以对规则数据的修改既可以通过ui页面进行,也可以直接修改数据库表,修改规则后无需重启即可生效。
req对象赋值给outReq对象的过程中会使用到对header信息的操作和对body信息的操作的规则。
res对象赋值给rw对象过程中会使用到header信息的操作、body信息的操作和修改http状态码的规则。
transport对象把outReq对象信息发送到目标服务器之前会使用修改url的规则;
可以对所有用户或者某一个用户设置规则,如果设置的规则不指定用户,则该规则是对所有用户都有效;如果指定用户则只对该用户有效;如果对同一个操作设置了两条规则,则按最新时间设置的有效;如果同一个操作设置了一条没指定用户的规则1,也设置了一条指定用户A的规则2,则规则1只针对除用户A以外的用户有效,规则2只针对用户A有效。这里的用户信息是从req对象的header中的token中解析的;
再进一步的,所述S5根据规则修改http相应报文,并返回至调用端的具体步骤如下:
S501把res对象数据赋值给rw对象;
S502赋值过程中,根据查出的规则数据,修改http响应数据的头信息、body体信息和状态码;
S503利用反向代理服务器把rw对象作为响应数据返回给调用端。
实施例二:
一种基于go语言的http反向代理系统,所述的系统具体包括请求封装模块、请求校验模块、参数修改模块、规则设置模块和报文返回模块:
请求封装模块:接受调用端发来的http请求,并把http请求封装成req对象;
请求校验模块:从req对象中的header中获取token数据,检查该token数据是否符合校验规则;
参数修改模块:从规则库查询目标服务器地址,修改http请求参数;
规则设置模块:将http请求发送到目标服务器并接受http响应报文;
报文返回模块:根据规则修改http相应报文,并返回至调用端;
进一步的,所述请求校验模块具体包括校验错误模块和校验符合模块:
校验错误模块:如果不符合校验规则,则拒绝继续执行并返回对应错误;
校验符合模块:如果符合校验规则,则继续执行;
进一步的,所述参数修改模块具体包括规则保存模块和信息处理模块:
规则保存模块:将设置的规则数据保存在数据库中;
信息处理模块:从req对象中获取header、body、url等数据,根据规则数据,修改其中的信息并赋值到outReq对象中。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (2)

1.一种基于go语言的http反向代理方法,其特征是所述的方法具体步骤如下:
S1接受调用端发来的http请求,并把http请求封装成req对象;
S2从req对象中的header中获取token数据,检查该token数据是否符合校验规则;
S3从规则库查询目标服务器地址,修改http请求参数;
S4将http请求发送到目标服务器并接受http响应报文;
S5根据规则修改http相应报文,并返回至调用端;
所述S2从req对象中的header中获取token数据,检查该token数据是否符合校验规则的具体步骤如下:
S201如果不符合校验规则,则拒绝继续执行并返回对应错误;
S202如果符合校验规则,则继续执行;
所述S3从规则库查询目标服务器地址,修改http请求参数的具体步骤如下:
S301将设置的规则数据保存在数据库中;
S302从req对象中获取header、body、url数据,根据规则数据,修改其中的信息并赋值到outReq对象中;
所述S301将设置的规则数据保存在数据库中的具体步骤包括:
S3011数据库保存对header的操作;
S3012数据库保存对url、http状态码的操作;
S3013数据库保存对body的增加、删除、修改属性的操作;
所述S4将http请求发送到目标服务器并接受http响应报文的具体步骤如下:
S401声明transport,根据规则,生成新的url地址;
S402使用transport.RoundTrip对象把outReq对象发送到目标服务器,并接受返回的res对象;
所述S5根据规则修改http相应报文,并返回至调用端的具体步骤如下:
S501把res对象数据赋值给rw对象;
S502赋值过程中,根据查出的规则数据,修改http响应数据的头信息、body体信息和状态码;
S503利用反向代理服务器把rw对象作为响应数据返回给调用端。
2.一种基于go语言的http反向代理系统,其特征是所述的系统具体包括请求封装模块、请求校验模块、参数修改模块、规则设置模块和报文返回模块:
请求封装模块:接受调用端发来的http请求,并把http请求封装成req对象;
请求校验模块:从req对象中的header中获取token数据,检查该token数据是否符合校验规则;
参数修改模块:从规则库查询目标服务器地址,修改http请求参数;
规则设置模块:将http请求发送到目标服务器并接受http响应报文;
报文返回模块:根据规则修改http相应报文,并返回至调用端;
所述请求校验模块具体包括校验错误模块和校验符合模块:
校验错误模块:如果不符合校验规则,则拒绝继续执行并返回对应错误;
校验符合模块:如果符合校验规则,则继续执行;
所述参数修改模块具体包括规则保存模块和信息处理模块:
规则保存模块:将设置的规则数据保存在数据库中;
信息处理模块:从req对象中获取header、body、url数据,根据规则数据,修改其中的信息并赋值到outReq对象中。
CN202111171520.5A 2021-10-08 2021-10-08 一种基于go语言的http反向代理方法及系统 Active CN113992749B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111171520.5A CN113992749B (zh) 2021-10-08 2021-10-08 一种基于go语言的http反向代理方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111171520.5A CN113992749B (zh) 2021-10-08 2021-10-08 一种基于go语言的http反向代理方法及系统

Publications (2)

Publication Number Publication Date
CN113992749A CN113992749A (zh) 2022-01-28
CN113992749B true CN113992749B (zh) 2024-05-14

Family

ID=79737785

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111171520.5A Active CN113992749B (zh) 2021-10-08 2021-10-08 一种基于go语言的http反向代理方法及系统

Country Status (1)

Country Link
CN (1) CN113992749B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116112558A (zh) * 2022-11-21 2023-05-12 上海浦东发展银行股份有限公司 一种基于axios的接口拦截方法和系统

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108509282A (zh) * 2018-02-08 2018-09-07 厦门快商通信息技术有限公司 基于golang反射技术的rpc跨语言调用服务治理方法
CN108810019A (zh) * 2018-07-13 2018-11-13 腾讯科技(深圳)有限公司 拒绝服务攻击防御方法、装置、设备和存储介质
CN109218368A (zh) * 2017-07-05 2019-01-15 北京京东尚科信息技术有限公司 实现Http反向代理的方法、装置、电子设备和可读介质
CN110022289A (zh) * 2018-01-10 2019-07-16 北龙中网(北京)科技有限责任公司 数据传输方法、装置及系统
CN110837359A (zh) * 2019-11-06 2020-02-25 北京小狗智能机器人技术有限公司 一种以GOLANG语言实现的MVC Web框架
CN111314447A (zh) * 2020-02-03 2020-06-19 杭州迪普科技股份有限公司 代理服务器及其处理访问请求的方法
CN112291240A (zh) * 2020-10-29 2021-01-29 国网汇通金财(北京)信息科技有限公司 一种信息处理方法及装置
CN112527376A (zh) * 2020-11-20 2021-03-19 浪潮软件科技有限公司 基于反向代理服务实现DevOps自动化的方法
CN112887334A (zh) * 2021-03-04 2021-06-01 浪潮云信息技术股份公司 受限环境下分布式认证方法及系统
CN112968944A (zh) * 2021-02-01 2021-06-15 武汉思普崚技术有限公司 一种网络反向管理方法、系统、装置及存储介质
CN113132447A (zh) * 2020-01-15 2021-07-16 北京沃东天骏信息技术有限公司 反向代理的方法和系统
CN113452686A (zh) * 2021-06-23 2021-09-28 中移(杭州)信息技术有限公司 数据处理方法、装置、代理服务器及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8079075B2 (en) * 2006-08-25 2011-12-13 Oracle International Corporation Active reverse proxy system
CN102647482B (zh) * 2012-03-31 2015-05-06 北京奇虎科技有限公司 一种访问网站的方法和系统
JP5954127B2 (ja) * 2012-11-14 2016-07-20 ブラザー工業株式会社 制御サーバ、データ処理装置、及び、データ処理装置のための制御装置
CN106131079B (zh) * 2016-08-29 2020-08-11 腾讯科技(北京)有限公司 一种认证方法、系统及代理服务器
US11212368B2 (en) * 2019-05-17 2021-12-28 Netflix, Inc. Fire-and-forget offload mechanism for network-based services

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109218368A (zh) * 2017-07-05 2019-01-15 北京京东尚科信息技术有限公司 实现Http反向代理的方法、装置、电子设备和可读介质
CN110022289A (zh) * 2018-01-10 2019-07-16 北龙中网(北京)科技有限责任公司 数据传输方法、装置及系统
CN108509282A (zh) * 2018-02-08 2018-09-07 厦门快商通信息技术有限公司 基于golang反射技术的rpc跨语言调用服务治理方法
CN108810019A (zh) * 2018-07-13 2018-11-13 腾讯科技(深圳)有限公司 拒绝服务攻击防御方法、装置、设备和存储介质
CN110837359A (zh) * 2019-11-06 2020-02-25 北京小狗智能机器人技术有限公司 一种以GOLANG语言实现的MVC Web框架
CN113132447A (zh) * 2020-01-15 2021-07-16 北京沃东天骏信息技术有限公司 反向代理的方法和系统
CN111314447A (zh) * 2020-02-03 2020-06-19 杭州迪普科技股份有限公司 代理服务器及其处理访问请求的方法
CN112291240A (zh) * 2020-10-29 2021-01-29 国网汇通金财(北京)信息科技有限公司 一种信息处理方法及装置
CN112527376A (zh) * 2020-11-20 2021-03-19 浪潮软件科技有限公司 基于反向代理服务实现DevOps自动化的方法
CN112968944A (zh) * 2021-02-01 2021-06-15 武汉思普崚技术有限公司 一种网络反向管理方法、系统、装置及存储介质
CN112887334A (zh) * 2021-03-04 2021-06-01 浪潮云信息技术股份公司 受限环境下分布式认证方法及系统
CN113452686A (zh) * 2021-06-23 2021-09-28 中移(杭州)信息技术有限公司 数据处理方法、装置、代理服务器及存储介质

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
Designing secure session based on reverse proxy;Wen-Guang Long and Jian-Ping Li;2012 International Conference on Wavelet Active Media Technology and Information Processing (ICWAMTIP);20130117;第299-301页 *
Go程序在云服务器中的反向代理实现;夏润松;电脑编程技巧与维护(第09期);第26-28页 *
K. J. O'Dwyer, E. Creedon, M. Purcell and D.Power saving for web servers using proxies.2013 Sustainable Internet and ICT for Sustainability (SustainIT).2013,第1-5页. *
基于Http反向代理的Web动态适配平台的设计与实现;蒲昊;《硕士电子期刊2014年第11期》;20141115;全文 *
高校能力开放平台中的API网关设计与实现;冯骐, 沈富可;中国教育信息化(第03期);第61-66页 *

Also Published As

Publication number Publication date
CN113992749A (zh) 2022-01-28

Similar Documents

Publication Publication Date Title
US11706218B2 (en) Systems and methods for controlling sign-on to web applications
US9413750B2 (en) Facilitating single sign-on (SSO) across multiple browser instance
US8898765B2 (en) Signing off from multiple domains accessible using single sign-on
JP4721621B2 (ja) リソースへのアクセスを認可するべきか否かを判定する方法
US8590003B2 (en) Controlling access to resources by hosted entities
US8984608B2 (en) Image processing apparatus, image processing system, and computer-readable storage medium for generating a token value
CN110888838B (zh) 基于对象存储的请求处理方法、装置、设备及存储介质
US11004054B2 (en) Updating account data for multiple account providers
CN111343145A (zh) 一种基于Redis的单点登录方法及装置
CN113992749B (zh) 一种基于go语言的http反向代理方法及系统
US8352442B2 (en) Determination of an updated data source from disparate data sources
CN111143532B (zh) 对话单元的访问方法、装置、设备及存储介质
CN111224878B (zh) 路由转发方法、装置、电子设备及存储介质
US20150324598A1 (en) Method and System for Managing Uniquely Identifiable Bookmarklets
CN112434054A (zh) 一种审计日志的更新方法及装置
WO2015085735A1 (en) Information requesting method and system
US20140379932A1 (en) Setting up communication between a web application and a terminal
CN114490889A (zh) 配置信息处理方法、装置、设备、介质及程序产品
WO2020224108A1 (zh) Url拦截转换方法、装置以及计算机设备
JP2014139708A (ja) 情報アクセス・システム、及び方法
CN115460270B (zh) 一种5g upf违规业务阻断方法及相关设备
CN116938876A (zh) 域名接入控制方法、系统、设备和存储介质
KR102367738B1 (ko) 가상 리소스의 그룹 멤버 유효성 검증 방법
CN112329034B (zh) 一种基于应用平台可控制访问策略的应用代理方法
CN107659379B (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
GR01 Patent grant
GR01 Patent grant