zoukankan      html  css  js  c++  java
  • Nginx的重要概念之request

    什么是request?

      request是指Nginx中的http请求,Nginx用结构体ngx_http_request_t对一个http请求进行封装,其中一个http请求包括请求行、请求头、请求体、响应行、响应头、响应体。

    webserver是如何处理http请求的?

      http请求是请求-响应类型的网络协议,http是文件协议,我们在分析请求行、请求头和输出响应行与响应头的时候都是一行行处理的。一个普通的http服务器在连接建立好后,接收到客户端发来的请求,它会读取一行数据,分析请求行中的method、uri、http_version等信息,然后再一行行处理请求头,并根据method与请求头信息来决定是否有请求体及请求体的长度,然后再读请求体。当请求产生需要输出的数据,就会生成响应行、响应头和响应体,并将响应发送给客户端。

    Nginx是如何处理http请求的?

      与webserver类似,Nginx在请求头读取完成后,通过ngx_http_request_t来保存解析请求与输出响应相关的数据。Nginx的处理请求的步骤如下:

    1. 通过ngx_http_init_request函数初始化请求
    2. 设置读事件为ngx_http_process_request_line函数
    3. 通过ngx_http_read_request_header函数来读取请求数据
    4. 调用ngx_http_parse_request_line函数解析请求行
    5. 将请求行解析到的参数,保存到ngx_http_request_t结构中
    6. 设置读事件为ngx_http_process_request_headers函数,后续的请求就在ngx_http_process_request_headers中进行读取与解析
    7. 通过ngx_http_read_request_header函数读取请求头
    8. 调用ngx_http_parse_request_line函数来解析请求头
    9. 解析到的请求头保存在ngx_http_request_t的域headers_in(一个链表结构,保存所有的请求头,请求头与请求处理函数存放在ngx_http_headers_in映射表里,初始化时会生成hash表,当解析到一个请求头后,就会在hash表里查找,如果有找到,就调用相应的处理函数来处理这个请求头)里
    10. 当解析到两个回车换行符时,请求头结束,调用ngx_http_process_request来处理请求。
    11. ngx_http_process_request设置当前的连接的读写事件处理函数为ngx_http_request_handler(读事件和写事件分别调用ngx_http_request_t中的read_event_handler和write_event_handler)
    12. 调用ngx_http_handler开始真正的处理一个完整的http请求,设置write_event_handler为ngx_http_core_run_phases并执行。
    13. 产生的响应头放在ngx_http_request_t的headers_out中。

    注意,Nginx会将请求头放在一个buffer里(buffer大小通过配置项client_header_buffer_size配置),如果请求头过大,Nginx会重新分配一个新的更大的buffer来装请求头(大buffer可以通过large_client_header_buffers设置)。为了保存请求行或请求头的完整性,一个完整的请求头或请求行,需要放在一个连续的内存里面,所以一个完整的请求行或请求头,只会保存在一个buffer。如果请求行大于buffer的大小,会返回414,如果请求头大于buffer大小,会返回400。

    根据以上的流程步骤画的Nginx处理http请求的流程图如下

    以上总结参考https://mp.weixin.qq.com/s/bXtI45d7M-XjkJH3ARZiMQ 

  • 相关阅读:
    SP笔记:交叉实现七行并成一行
    HTML tag 学习
    操作哈希表
    Efficient bipedal robots based on passivedynamic walkers
    Pushing People Around
    ZEROMOMENT PONTTHIRTY FIVE YEARS OF ITS LIFE

    Active Learning for RealTime Motion Controllers
    Accelerometerbased User Interfaces for the Control of a Physically Simulated Character
    Dynamic Response for Motion Capture Animation
  • 原文地址:https://www.cnblogs.com/smallzhen/p/12634509.html
Copyright © 2011-2022 走看看