当前位置: 首页 > news >正文

专业制作网站推荐wordpress 视频预览

专业制作网站推荐,wordpress 视频预览,国际贸易平台哪个好,天元建设集团有限公司王士坤跨域案例go gf #xff0c;请求代理#xff0c;前端请求后端A转后端B 案例#xff1a;从前端请求后端A#xff08;路径携带argusx#xff09;#xff0c;后端A转发请求到多个不同地区#xff08;可一个#xff09;后端B(切掉argusx#xff0c;其他不变进行请求)…跨域案例go gf 请求代理前端请求后端A转后端B 案例从前端请求后端A路径携带argusx后端A转发请求到多个不同地区可一个后端B(切掉argusx其他不变进行请求)由请求头x-proxy指定请求哪个服务端 方案一handler形式处理 func InitRouter() {s : g.Server()// 分组路由注册方式app.Api s.Group(/argusx, func(group *ghttp.RouterGroup) {// 跨域中间件service.Middleware.InitGroup(group)ReverseProxy(group, /xxx/)}) }// InitGroup 注册中间件 func (s *middlewareService) InitGroup(group *ghttp.RouterGroup) {group.Middleware(// 跨域处理s.CORS,//s.Auth,) } // 使用默认跨域处理 func (s *middlewareService) CORS(r *ghttp.Request) {//r.Response.CORSDefault() //若是请求头没有新的则直接用default否则用下面三行代码options : r.Response.DefaultCORSOptions()options.AllowHeaders options.AllowHeaders ,X-Proxyr.Response.CORS(options)r.Middleware.Next() } func ReverseProxy(pg *ghttp.RouterGroup, path string) {op : func(r *ghttp.Request) {// 根据code拿到地址可用自己的方式获取参数argusvoiceCode : r.GetHeader(x-proxy)g.Log().Infof([argusvoice] argusvoiceCode%s, argusvoiceCode)if argusvoiceCode ! {argusvoiceApi : service.GetArgusVoiceUrlByCode(argusvoiceCode)g.Log().Infof([argusvoice] argusvoiceApi%s, argusvoiceApi)remote, err : url.Parse(argusvoiceApi)if err ! nil {fmt.Println(err.Error())g.Log().Errorf([argusvoice] url parse error, argusvoiceApi%s, error%v, argusvoiceApi, err)}reverseProxy : proxy.GoReverseProxy(proxy.RProxy{Remote: remote,})if err ! nil {fmt.Println(err.Error())r.ExitAll()return}reverseProxy.ServeHTTP(r.Response.Writer, r.Request)r.ExitAll()} else {r.Middleware.Next()}}pg.Bind([]ghttp.GroupItem{{ALL, path *, op}}) } 方案二中间件的形式代理 对所有请求都拦截包括options这样需要自己处理options请求options请求是为了协商请求头所以需要返回成功以及必要信息方便后期请求携带。 请求允许的加上x-proxy注意option请求是拿不到具体的值 坏处无法使用框架自带的options处理 s.BindMiddlewareDefault(func(r *ghttp.Request) {// 根据code拿到地址accessControlHeaders : r.Header.Get(Access-Control-Request-Headers)isProxy : strings.Contains(accessControlHeaders, x-proxy)argusvoiceCode : r.GetHeader(x-proxy)r.Header.Set(Access-Control-Allow-Origin, *)g.Log().Infof([argusvoice] argusvoiceCode%s, argusvoiceCode)if isProxy || (argusvoiceCode ! ) {argusvoiceApi : service.GetArgusVoiceUrlByCode(argusvoiceCode)if r.Request.Method OPTIONS {r.Response.Status 200// 以下头部请参照自己正常请求的头部r.Response.Header().Set(Access-Control-Allow-Origin, r.Header.Get(Origin)) //此处不能写作*r.Response.Header().Set(Access-Control-Allow-Credentials, true)r.Response.Header().Set(Access-Control-Allow-Headers, Content-Type,AccessToken,X-CSRF-Token, Authorization, Token, x-token, x-requested-with,Accept,Origin,Referer,User-Agent,x-proxy)r.Response.Header().Set(Access-Control-Allow-Methods, POST, GET, OPTIONS, PUT, PATCH, DELETE)r.Response.Header().Set(Access-Control-Expose-Headers, Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type)return}g.Log().Infof([argusvoice] argusvoiceApi%s, argusvoiceApi)remote, err : url.Parse(argusvoiceApi)if err ! nil {fmt.Println(err.Error())g.Log().Errorf([argusvoice] url parse error, argusvoiceApi%s, error%v, argusvoiceApi, err)}reverseProxy : proxy.GoReverseProxy(proxy.RProxy{Remote: remote,})if err ! nil {fmt.Println(err.Error())r.ExitAll()return}reverseProxy.ServeHTTP(r.Response.Writer, r.Request)r.ExitAll()} else {r.Middleware.Next()} }) proxy文件此处代码大部分抄自https://github.com/hezhizheng/go-reverse-proxy/blob/master/handle.go 该项目使用案例https://hzz.cool/blog/implementation-of-simple-http-and-https-reverse-proxy-by-golang package proxyimport (github.com/gogf/gf/frame/gnet/httpnet/http/httputilnet/urlstrings )type RProxy struct {Remote *url.URL }func GoReverseProxy(this *RProxy) *httputil.ReverseProxy {remote : this.Remoteproxy : httputil.NewSingleHostReverseProxy(remote)proxy.Director func(request *http.Request) {Path : targetQuery : remote.RawQueryrequest.URL.Scheme remote.Schemerequest.URL.Host remote.Hostrequest.Host remote.HostPath, request.URL.RawPath joinURLPath(remote, request.URL)Paths : strings.Split(Path, /argusx)request.URL.Path Paths[1]g.Log().Infof([argusvoice] request.Body%v, request.Body)if targetQuery || request.URL.RawQuery {request.URL.RawQuery targetQuery request.URL.RawQuery} else {request.URL.RawQuery targetQuery request.URL.RawQuery}g.Log().Infof([argusvoice] request.URL.Path%s, request.URL.RawQuery%s, request.URL.Path, request.URL.RawQuery)}proxy.ModifyResponse func(response *http.Response) error {response.Header.Del(Access-Control-Allow-Origin)response.Header.Del(Access-Control-Allow-Credentials)response.Header.Del(Access-Control-Allow-Headers)response.Header.Del(Access-Control-Allow-Methods)return nil}return proxy }// go sdk 源码 func joinURLPath(a, b *url.URL) (path, rawpath string) {if a.RawPath b.RawPath {return singleJoiningSlash(a.Path, b.Path), }// Same as singleJoiningSlash, but uses EscapedPath to determine// whether a slash should be addedapath : a.EscapedPath()bpath : b.EscapedPath()aslash : strings.HasSuffix(apath, /)bslash : strings.HasPrefix(bpath, /)switch {case aslash bslash:return a.Path b.Path[1:], apath bpath[1:]case !aslash !bslash:return a.Path / b.Path, apath / bpath}return a.Path b.Path, apath bpath }// go sdk 源码 func singleJoiningSlash(a, b string) string {aslash : strings.HasSuffix(a, /)bslash : strings.HasPrefix(b, /)switch {case aslash bslash:return a b[1:]case !aslash !bslash:return a / b}return a b }
http://www.w-s-a.com/news/259288/

相关文章:

  • 专业网站设计建设公司抖音代运营公司排名前十强
  • 做网站架构肃北蒙古族自治县建设局网站
  • 推广网站怎么建经济研究院网站建设方案
  • 网站建设商家淘宝客自建网站做还是用微信qq做
  • django做网站效率高吗涉县移动网站建设报价
  • 做外贸网站注册什么邮箱能够做渗透的网站
  • 购物网站 怎么做织梦网站会员功能
  • 北京市网站开发公司郑州联通网站备案
  • 温岭专业营销型网站建设地址wordpress小程序怎么不用认证审核
  • 网站建设主体设计要求微信公众号缴费
  • 网站建设的税率WordPress多用户建站
  • 专业门户网站的规划与建设网络培训
  • 东莞汽车总站停止营业crm管理系统在线使用
  • 深圳网站建设公司哪个网络优化是做什么的
  • 大连地区做网站自己怎么做电影网站
  • 成都APP,微网站开发手机要访问国外网站如何做
  • 网站app建设用discuz做的手机网站
  • vs 2008网站做安装包公众号登录超时
  • 银川做网站推广wordpress dux会员中心
  • 双辽做网站wordpress怎么写html代码
  • 建站公司哪家好 知道万维科技西安都有哪些公司
  • 设计网站官网入口佛山 品牌设计
  • 专用网站建设wordpress mega
  • 网站建设与优化推广方案内容网站整站下载带数据库后台的方法
  • 做网站PAAS系统外链是什么意思
  • 网页设计专业设计课程googleseo排名公司
  • 网站百度百科那些免费网站可以做国外贸易
  • 做视频的网站有哪些南京计算机培训机构哪个最好
  • ppt做视频 模板下载网站商业街网站建设方案
  • 佛山网站定制开发星光影视园网站建设案例