美文网首页
13.http请求头部流程

13.http请求头部流程

作者: _小二_ | 来源:发表于2020-04-15 14:24 被阅读0次
    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请求头部流程

          本文链接:https://www.haomeiwen.com/subject/zjjcvhtx.html