Oathkeeper的HTTP(S)服务端启动过程

0 前言

    Oathkeeper主要基于HTTP server接收的HTTP/HTTPS请求,并进行认证,授权等操作。因此,对于其服务端的启动、Handler注册、Handler执行过程需要更加的了解才能够进行后续的开发。

1 HTTP(s)handle的注册

    Oathkeeper通过以下代码完成HTTP处理函数的注册。

    

        handler := &httputil.ReverseProxy{
			Director:  proxy.Director, //通过Director将请求将客户端请求转发出去
			Transport: proxy,
		}
        /*
           n为*negroni.Negroni对象,n.Use和n.UseHandler函数按着使用顺序形成一条函数调用链[fun1,fun2,...,funx]
           其中,fun1的参数有三个:请求数据,响应数据,以及next
           UseHandler函数会对http.Handler类型的变量(设为handler)进行装饰,在执行完handler.ServeHTTP后,会自动执行调用链接下来的函数
        */
        n.Use(metrics.NewMiddleware(prom, "oathkeeper-proxy").ExcludePaths(healthx.ReadyCheckPath, healthx.AliveCheckPath).CollapsePaths(promCollapsePaths))
		n.Use(reqlog.NewMiddlewareFromLogger(logger, "oathkeeper-proxy").ExcludePaths(healthx.ReadyCheckPath, healthx.AliveCheckPath))
        /*
          执行完n.UseHandler后,warp(handler.ServeHTTP)会加入函数调用链
        */
		n.UseHandler(handler)

   由于Negroni实现了ServeHTTP接口,所以它也是一个http.Handler,他的ServeHTTP接口实现如下:

   

/*
    对一个请求,该ServeHTTP最先被调用
*/
func (n *Negroni) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
	n.middleware.ServeHTTP(NewResponseWriter(rw), r)
}

/*
    由Negroni调用,middleware会从前往后调用由n.Use和n.UseHandler注册的内容
*/
func (m middleware) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
	m.handler.ServeHTTP(rw, r, m.nextfn)
}

    在执行完三个use函数后,Negroni的handles成员会有三个Handler,在执行Negroni.ServeHTTP时,会依次执行这三个Handler的ServeHTTP函数,在执行到第三个Handler(即:httputil.ReverseProxy)时,就会执行认证授权及转发流程

2 HTTP请求的处理流程

   借鉴一个大佬的博客《深入理解Golang之http server》,HTTP数据包到达服务器后的整体流程如下图所示:

   

                                                                                                                                                                    图1  HTTP server整体处理流程

          在Oathkeeper启动服务器的流程中,可以通过验证证书是否有效从而确定是启动HTTP服务还是启动HTTPS服务。

          就HTTPS服务器启动而言,主要经过了如下流程:

          

 

                                                                                                                                                                        图2   TLS服务器整体运行流程框架流程

    由图2所示,在最开始的启动阶段,服务器将监听端口直到收到请求。在收到HTTPS请求后,则会开一个协程,完成TLS的握手、获取请求数据并调用服务端的ServeHTTP,对于Oathkeeper,即第一节中的Negroni.ServeHTTP。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值