13.http请求头部流程

clipboard.png
连接部分

1.客户端和服务器通过三次握手,请求连接信息
2.服务器通过客户端发送得ACK确认链接成功,负载均衡算法选中在服务 器上运行得nginxworker进程进行请求内容处理前的设置
3.nginx的时间模块收到服务器句柄发送的epoll_wait事件,接收后分配连接内存池大小(connection_pool_size:初始化512b
4.事件模块转到HTTP模块,通过调用ngx_http_init_connection方法回调 到epoll_ctl方法中,添加超时定时器(设置的客户端请求头超时时间 client_header_timeout:60s

请求部分(一)

1.客户端发送data信息给服务器,服务器回应ACK响应收到请求,同时通过句柄调用nginx事件模块的epoll_wait方法
2.事件模块通过回调ngx_http_wait_request_handler(在连接部分的第四步时设置回调方法)将客户端发送的data保存HTTP模块的用户态中,故分配内存(client_header_buffer_size: 1k 内存从连接部分第三步的连接内存池中分配),read读缓冲区

clipboard.png
请求部分(二)

HTTP模块,到请求上下文分析这里,会接收到分配的1k或者小于1k的请求url信息,需要对整个请求 进行处理

3.根据请求的url,分配请求内存池(request_pool_size: 4k 大小根据业务状况来调整,用于分析HTTP协议,请求header
4.状态机解析请求行:包括方法名,url地址,HTTP协议
如果url特别大,超过了client_header_buffer_size的配置大小,则需要分配大内存large_client_header_buffers 4 8k(参数的含义即: 4 8k,表示当请求进来分配的client_header_buffer_size 1k内存不够用的时候,会分配第一个8k内存给请求使用,这个8k包含之前分配的1k内存,即剩下7k内存使用,当第一个8k不够用的时候,再下一个,,总共可以分配四次8k内存,总32k)
5.状态机解析请求行后,标识url- 通过指针指向这个url
6.状态机开始解析请求headercookie等信息),请求的header使用的内存也是和请求行一致,两者共用内存
7.解析header之后 移除在 连接部分-4 设置的 超时定时器( client_header_timeout
8.开始进行HTTP请求处理的11个阶段

 注:client_header_buffer_size   默认大小 1k
        上下文:http, server
    large_client_header_buffers   默认大小 4 8k
        上下文:http, server

你可能感兴趣的:(13.http请求头部流程)