nginx - 处理http请求

每个配置项都有这个结构:

struct ngx_http_core_loc_conf_s {    ...    ngx_http_handler_pt  handler;    ...};typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r);

需要先define http request的return value (NGX_HTTP_OK... /src/http/ngx_http_request.h)
也能返回nginx global error code:

#define  NGX_OK          0      //继续执行#define  NGX_ERROR      -1      #define  NGX_AGAIN      -2      //结束目前handler处理#define  NGX_BUSY       -3#define  NGX_DONE       -4      //框架不再执行#define  NGX_DECLINED   -5      //在同phase继续找对该请求有兴趣的module#define  NGX_ABORT      -6#define  NGX_NEXT       -7

ngx_http_request_s

method: NGX_HTTP_GET(0x0002), NGX_HTTP_POST(0x0008)...用&判断flagurihttp_versionheader_in: 未经解析的http header

接收http header
ngx_http_request_t -> header_in存放接收到的header

接收http body

ngx_int_t ngx_http_read_client_request_body(ngx_http_request_t*r, ngx_http_client_body_handler_pt post_handler)

异步, 调用时表示要求nginx开始接收request body, 接收完调用post_handler.

发送http response header

ngx_int_t ngx_http_send_header(ngx_http_request_t *r);static ngx_int_t ngx_http_header_filter(ngx_http_request_t *r)//ngx_http_request_t -> header_out存放response header

例子:
http://img2.58codes.com/2024/20109268bHjYNiPMSC.png

发送http response body

ngx_int_t ngx_http_output_filter(ngx_http_request_t *r, ngx_chain_t *in)

ngx_chain_t *in 用于容纳ngx_buf_t
例子:

ngx_buf_t *b = ngx_create_temp_buf(r->pool, 128);ngx_chain_t out;out.buf = b;out.next = NULL;return ngx_http_output_filter(r, &out);     //发送response body
ngx_buf_t *ngx_create_temp_buf(ngx_pool_t *pool, size_t size)//nginx做的封装,创造暂存区

http://img2.58codes.com/2024/201092686GleAvfZ49.png


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章