首頁 >後端開發 >php教程 >Nginx學習之三-ngx_http_request_t結構體

Nginx學習之三-ngx_http_request_t結構體

WBOY
WBOY原創
2016-07-28 08:26:281036瀏覽

摘自: http://blog.csdn.net/xiajun07061225/article/details/9189505   江雨煙雲的部落格

ngx_http_request_s是nginx中非常重要的一個結構體,貫穿整個過程中。

下面解釋了ngx_http_request_s結構體中與HTTP框架相關的重要的成員變數。

[cpp] view plain copy print?

  1. struct ngx_http_request_s {                 signature;         
  2. /* "HTTP" */
  3.     
  4.     ngx_connection_t               🎜>    //指向存放所有HTTP模組的情境結構體的指標陣列
  5.   
  6.               **ctx;  
  7.     //指向請求對應的存放main層級配置結構體的指標陣列  void
  8.                             >//指向請求對應的存放srv層級配置結構體的指標數組  
  9.     
  10. void      _conf;  
  11.     
  12. //指向請求對應的存放loc等級配置結構體的指標陣列  
  13.                 **loc_conf;  
  14.   
  15.     /*接收完http頭部,第一次在業務上處理http請求時,http框架提供的處理方法是ngx_http_process_request。  
  16.      但如果該方法無法一次處理完該請求的全部業務,在歸還控制權到epoll時間模組後,該請求再次被回調時,
  17.       將透過Ngx_http_request_handler方法處理,而這個方法中可讀事件的處理就是呼叫read_event_handler處理請求。 
  18.      也就是說,http模組希望在底層處理請求的讀取事件時,重新實作read_event_handler方法 
  19.     */  
  20.    
  21.     
  22. //與以上的方法類似  
  23.     ngx_http_event_handler_pt  🎜>  
  24. #if (NGX_HTTP_CACHE)  
  25.    *cache;  
  26. #endif  
  27.    
  28.   
  29.     ngx_http_upstream_t          ngx_array_t                      *upstream_states;   /* of ngx_http_upstream_state_t */
  30.   
  31.  記憶體池  
  32.     ngx_pool_t          
  33. //用於接收http請求內容的緩衝區,主要接收http頭部
  34.   
  35.     ngx_    in;    
  36.     
  37. //ngx_http_process_request_headers在接收、解析完http請求的頭部後,會把解析完的每一個http頭部加入到headers_in的headers鍊錶中,同時會同時會出現在中的構造下的建構體其他會員
  38.       ngx_http_headers_in_    🎜>    
  39. //http模組會把想要送的http對應資料放到headers_out中,預期http框架將headers_out中的成員序列化為http回應套件傳送給使用者
  40.   
  41. headers_out;
  42.       //接收中包體的資料結構
  43.     ngx_http_request_body_t          *request_body;  //延遲關閉連線的時間
  44.       
  45. time_t
  46.       lingering_time;  
  47.     
  48. //目前要求初始化時的時間
  49.       
  50. time_t
  51.     ngx_msec_t                        
  52.     //下面的9個成員是函數ngx_http_process_request_line方法在接收、解析http請求行時解析出的資訊      ngx_uint_t                        以來與選擇🎜>    ngx_uint_t                        http_version;
  53.           quest_line;  
  54.     ngx_str_t              使用者請求中的uri  
  55.     ngx_str_t     🎜>//使用者請求中的url參數
  56.   
  57.     ngx_str_t               🎜>    ngx_str_t                🎜>//沒有URL解碼的原始請求  
  58.      //使用者要求中的方法名稱字串
  59.       ngx_str    col;
  60. //其data成員指向請求中http起始位址
  61.     
  62.   out中保存著由headers_out中序列化後的表示http頭部的TCP流。
  63.  
  64.      * 在呼叫ngx_http_output_filter方法後,out中還會儲存待傳送的http包體,它是實現非同步發送回應的關鍵。 */  
  65.     ngx_chain_t      🎜>    /*目前請求既有可能是使用者發出的請求,也可能是派生出的子請求。
  66.  
  67.      * 而main標識一系列相關的派生子請求的原始請求。  
  68.      * 一般可透過main和目前請求的位址是否相等來判斷目前請求是否為使用者發送的原始請求。*/  
  69.     ngx_http_request_t     🎜>    //目前請求的父親請求(不一定是原始請求)
  70.       ngx_http_request_t   🎜>    
  71. //與subrequest子請求相關的功能
  72.   
  73.     ngx_http_postponed_request_t   ngx_http_post_subrequest_t       *post_subrequest;      
  74. //所有的子請求都是透過這個單鍊錶連結起來的
  75.   
  76.   
  77.     /*一個全域的ngx_http_phase_engler_http_phase_engler_http_phase_engler)。  
  78.      * 而phase_handler成員與該陣列搭配使用。表示下次應執行phase_handler作為序號指定的陣列中的回呼方法*/
  79.   
  80.           phase_handler;      
  81. //表示NGX_HTTP_CONTENT_PHASE階段提供給http模組處理請求的一種方式,它指向http模組實現的請求處理方法
  82.       ngx_http_handler_pt               content_handler;    
  83.     ngx_uint_t       🎜>
  84.   
  85.     ngx_http_variable_value_t      ngx_http_variable_value_t      ng變項;  
  86.   
  87. #if (NGX_ 🎜>     ngx_uint_t                                                      以來化中; *captures_data;  
  88. #endif
  89.   
  90.   
  91. size_t
  92.                        🎜>  
  93.     /* 學習不含標頭的Apache 相容於回應長度*/  
  94.        
  95.     //http要求的全部長度,包含http包體
  96. >
  97.     off_t                         🎜>    ngx_uint_t                   
  98.     ngx_http_connection_t            *http_connection 🎜>       ngx_http_spdy_stream_t           *spdy_stream;  
  99.   
  100. ngx_http_log_handler_pt           log_handler;  //在這個請求中如果打開了某一些資源,並需要在請求結束時釋放,那麼需要將定義的釋放資源的方法加入到該成員
  101.   
  102.    ;  
  103.   
  104.     未簽署         
  105.     //引用計數在這個請求的原始請求上的一般作用
  106.   
  107. //引用計數,每當原始派生出子請求時,計數的請求成員都會加一
  108.   
  109.     unsigned           //阻止標誌位,目前僅由aio使用
  110.   
  111.     unsigned                          🎜>
  112.     
  113. //標誌位:為1表示蛋清請求正在使用非同步IO  
  114.     unsigned        
  115.   
  116.     unsigned                          🎜>
  117.     /* URI with "/." and on Win32 with "//" */
  118.   
  119.     unsigned         
  120.       /* URI with "%" */
  121.   
  122.   
  123.     /* URI with "+" */  
  124.   
  125.     /* 🎜>
  126.     unsigned                       🎜>
  127.     unsigned                    >  
  128.     unsigned               🎜>
  129.     unsigned                       unsigned                          valid_unparsed_uri:1;  
  130.   
  131.     unsigned                          🎜>//表示使用rewrite重寫URL的次數  
  132.     unsigned                         🎜>    unsigned                       
  133.     unsigned                          request_body_in_file_only:1;
  134.     未簽名                            未簽章                          request_body_in_clean_file:1)                      request_body_file_group_access:1;  
  135.     未簽名                         
  136.     未簽署                   🎜>
  137.     未簽名                       🎜>
  138. #if (NGX_HTTP_CACHE)
  139.   
  140.     未簽署            🎜>
  141. #endif  
  142.   
  143. #if (NGX_HTTP_GZIP)#if (NGX_HTTP_GZIP)
  144. #if (NGX_HTTP_GZIP)    未簽名                          gzip                       gzip_ok:1;  
  145. #endif
  146.   
  147.     
  148.   
  149.     未簽署                      未簽名                          no_cache: 🎜>
  150.     /*
  151.  
  152.        * ngx_http_limit_conn_module 與 ngx_http_limit_req_module
  153.  
  154.  
  155. 🎜> 

  156.      */
  157.   
  158.            limit_conn_set: 1;  
  159.     無符號                          limit_req_set:1) >#if 0  
  160.     unsigned                          🎜>  
  161.   
  162.     unsigned                        unsigned                          chunked:1;      
  163. //標誌位,並為1表示當前請求時keepalive請求  
  164.     
  165. //延遲關閉標示位
  166.   
  167.     //標記位:為1表示正在丟棄http請求中的包體  
  168.     unsigned                          dis中使用:為1表示請求的當前狀態是在做內部跳轉  
  169.     unsigned                       unsigned                          error_page:1;                     ignore_content_encoding:1 ;  
  170.     unsigned                  >
  171.     unsigned                                                 request_complete: 1;  
  172.     unsigned                 🎜>    //標誌位:為1表示發生給客戶端的http回應頭已經寄  
  173.     unsigned         
  174.     unsigned                        unsigned                          
  175.     unsigned                                                   logged:1;  
  176.     //標記位,表示緩衝中是否有待寄送內容
  177.   
  178.       unsigned                          main_filter_need_in_memory:1;  
  179.     unsigned                          filter_need_in_memory:1;  
  180.     unsigned                          filter_need_temporary:1;                       allow_ranges:1;  
  181.   
  182.     unsigned    t_reading:1;  
  183.     unsigned               >
  184. #endif  
  185.  >/* used to parse HTTP headers */  
  186.  分析http時使用state來表示目前的解析狀態,需要檢查是否構成完成的http請求行
  187.   
  188.         state;    
  189.     ngx_uint_t                        header_hash;  
  190.     ngx_uint_t                        lowcase_index;      u_char lowcase_header[NGX_HTTP_LC_HEADER_LEN];  
  191.   
  192.     u_    *header_name_end;      u_char                        u_char                           *header_end;  
  193.     /* 
  194.          * 透過 ngx_http_ephemeral_t
  195.  
  196.     u_char                        u_char                                                 *uri_ext;  
  197.     u_char                         u_char                           *request_start;      u_char                         u_char                           *schema_start;       u_char                                                     *host_end;      u_char                          ¢ 🎜>
  198.     未簽名                          未簽章                          http_major:16;   以上就介紹了Nginx學習之三-ngx_http_request_t結構體,包括了方面的內容,希望對PHP教程有興趣的朋友得到幫助。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn