Nginx-HTTP框架的执行流程

原创:https://blog.csdn.net/ndzjx/article/details/89323732

 

HTTP框架存在的主要目的有两个:

1:针对基于TCP的事件框架解决好HTTP的网络传输、解析、组装等问题。

2:为HTTP模块屏蔽事件驱动架构,使得HTTP模块不需要关心网络事件的处理。

 

TCP网络事件,可粗略的分为:

可读事件:收到SYN包带来的新连接事件,收到FIN包带来的连接关闭事件,套接子缓冲区上真正收到TCP流。

可写事件:(Nginx提供限速功能,有时可写事件触发时未必可以去发送响应。)

 

 

HTTP框架依靠事件机制实现的,完成最主要的4项工作:

1:集成事件驱动机制,管理用户发起的TCP连接,处理网络读写事件,并在定时器中处理请求超时的事件。

2:与各个HTTP模块共同处理请求。

3:允许将一个请求分解为多个子请求。

4:提供基本的工具接口,供HTTP模块使用(如接受HTTP包体,发送HTTP响应头部、响应包体等)

 

 

HTTP框架处理请求的第一步在ngx_http_init_connection方法中。新建立连接的可读事件处理方法设置为ngx_http_wait_request_handler。

HTTP框架不会在连接建立成功后就开始初始化请求,而是在连接对应的套接字缓冲区上确实收到了用户发来的请求内容时才进行。

 

接收HTTP请求行 ngx_http_process_request_line

接受HTTP头部 ngx_http_process_request_headers

处理HTTP请求 ngx_http_process_request/ngx_http_request_handler

ngx_event_t的data指向了ngx_connection_t连接,ngx_connection_t的data指向了ngx_http_request_t结构体。

接收包体 ngx_http_read_client_request_body/ngx_http_read_client_request_body_handler

丢弃包体 ngx_http_discard_request_body

发送HTTP响应:ngx_http_send_header方法(构造HTTP响应行、头部,同时会把他们发送给客户端)和ngx_http_output_filter方法(发送响应包体),这两个方法都会调用ngx_http_write_filter

 

ngx_http_core_rewrite_phase不会导致跨过同一个HTTP阶段的其他处理方法,就直接跳到下一个阶段来处理请求。rewrite阶段所有的模块时平等的。

 

 

HTTP框架要求在请求的某个动作结束时,必须调用ngx_http_finalize_request方法来结束请求。

从底层到上层分别为:

ngx_http_close_connection

ngx_http_free_request

ngx_http_close_request

ngx_http_finalize_connection

ngx_http_terminate_request

ngx_http_finalize_request

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值