src/http/ngx_http_request.h - nginx-1.31.9 nginx/ @ 2a3a19c6f

Data types defined

Macros defined

Source code


  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Nginx, Inc.
  4. */


  5. #ifndef _NGX_HTTP_REQUEST_H_INCLUDED_
  6. ‌#define _NGX_HTTP_REQUEST_H_INCLUDED_


  7. ‌#define NGX_HTTP_MAX_URI_CHANGES           10
  8. ‌#define NGX_HTTP_MAX_SUBREQUESTS           50
  9. ‌#define NGX_HTTP_MAX_BLOCKED               250

  10. /* must be 2^n */
  11. ‌#define NGX_HTTP_LC_HEADER_LEN             32


  12. ‌#define NGX_HTTP_DISCARD_BUFFER_SIZE       4096
  13. ‌#define NGX_HTTP_LINGERING_BUFFER_SIZE     4096


  14. ‌#define NGX_HTTP_VERSION_9                 9
  15. ‌#define NGX_HTTP_VERSION_10                1000
  16. ‌#define NGX_HTTP_VERSION_11                1001
  17. ‌#define NGX_HTTP_VERSION_20                2000
  18. ‌#define NGX_HTTP_VERSION_30                3000

  19. ‌#define NGX_HTTP_UNKNOWN                   0x00000001
  20. ‌#define NGX_HTTP_GET                       0x00000002
  21. ‌#define NGX_HTTP_HEAD                      0x00000004
  22. ‌#define NGX_HTTP_POST                      0x00000008
  23. ‌#define NGX_HTTP_PUT                       0x00000010
  24. ‌#define NGX_HTTP_DELETE                    0x00000020
  25. ‌#define NGX_HTTP_MKCOL                     0x00000040
  26. ‌#define NGX_HTTP_COPY                      0x00000080
  27. ‌#define NGX_HTTP_MOVE                      0x00000100
  28. ‌#define NGX_HTTP_OPTIONS                   0x00000200
  29. ‌#define NGX_HTTP_PROPFIND                  0x00000400
  30. ‌#define NGX_HTTP_PROPPATCH                 0x00000800
  31. ‌#define NGX_HTTP_LOCK                      0x00001000
  32. ‌#define NGX_HTTP_UNLOCK                    0x00002000
  33. ‌#define NGX_HTTP_PATCH                     0x00004000
  34. ‌#define NGX_HTTP_TRACE                     0x00008000
  35. ‌#define NGX_HTTP_CONNECT                   0x00010000

  36. ‌#define NGX_HTTP_CONNECTION_CLOSE          1
  37. ‌#define NGX_HTTP_CONNECTION_KEEP_ALIVE     2


  38. ‌#define NGX_NONE                           1


  39. ‌#define NGX_HTTP_PARSE_HEADER_DONE         1

  40. ‌#define NGX_HTTP_CLIENT_ERROR              10
  41. ‌#define NGX_HTTP_PARSE_INVALID_METHOD      10
  42. ‌#define NGX_HTTP_PARSE_INVALID_REQUEST     11
  43. ‌#define NGX_HTTP_PARSE_INVALID_VERSION     12
  44. ‌#define NGX_HTTP_PARSE_INVALID_09_METHOD   13

  45. ‌#define NGX_HTTP_PARSE_INVALID_HEADER      14


  46. /* unused                                  1 */
  47. ‌#define NGX_HTTP_SUBREQUEST_IN_MEMORY      2
  48. ‌#define NGX_HTTP_SUBREQUEST_WAITED         4
  49. ‌#define NGX_HTTP_SUBREQUEST_CLONE          8
  50. ‌#define NGX_HTTP_SUBREQUEST_BACKGROUND     16

  51. ‌#define NGX_HTTP_LOG_UNSAFE                1


  52. ‌#define NGX_HTTP_CONTINUE                  100
  53. ‌#define NGX_HTTP_SWITCHING_PROTOCOLS       101
  54. ‌#define NGX_HTTP_PROCESSING                102
  55. ‌#define NGX_HTTP_EARLY_HINTS               103

  56. ‌#define NGX_HTTP_OK                        200
  57. ‌#define NGX_HTTP_CREATED                   201
  58. ‌#define NGX_HTTP_ACCEPTED                  202
  59. ‌#define NGX_HTTP_NO_CONTENT                204
  60. ‌#define NGX_HTTP_PARTIAL_CONTENT           206

  61. ‌#define NGX_HTTP_SPECIAL_RESPONSE          300
  62. ‌#define NGX_HTTP_MOVED_PERMANENTLY         301
  63. ‌#define NGX_HTTP_MOVED_TEMPORARILY         302
  64. ‌#define NGX_HTTP_SEE_OTHER                 303
  65. ‌#define NGX_HTTP_NOT_MODIFIED              304
  66. ‌#define NGX_HTTP_TEMPORARY_REDIRECT        307
  67. ‌#define NGX_HTTP_PERMANENT_REDIRECT        308

  68. ‌#define NGX_HTTP_BAD_REQUEST               400
  69. ‌#define NGX_HTTP_UNAUTHORIZED              401
  70. ‌#define NGX_HTTP_FORBIDDEN                 403
  71. ‌#define NGX_HTTP_NOT_FOUND                 404
  72. ‌#define NGX_HTTP_NOT_ALLOWED               405
  73. ‌#define NGX_HTTP_PROXY_AUTH_REQUIRED       407
  74. ‌#define NGX_HTTP_REQUEST_TIME_OUT          408
  75. ‌#define NGX_HTTP_CONFLICT                  409
  76. ‌#define NGX_HTTP_LENGTH_REQUIRED           411
  77. ‌#define NGX_HTTP_PRECONDITION_FAILED       412
  78. ‌#define NGX_HTTP_REQUEST_ENTITY_TOO_LARGE  413
  79. ‌#define NGX_HTTP_REQUEST_URI_TOO_LARGE     414
  80. ‌#define NGX_HTTP_UNSUPPORTED_MEDIA_TYPE    415
  81. ‌#define NGX_HTTP_RANGE_NOT_SATISFIABLE     416
  82. ‌#define NGX_HTTP_MISDIRECTED_REQUEST       421
  83. ‌#define NGX_HTTP_TOO_MANY_REQUESTS         429


  84. /* Our own HTTP codes */

  85. /* The special code to close connection without any response */
  86. ‌#define NGX_HTTP_CLOSE                     444

  87. ‌#define NGX_HTTP_NGINX_CODES               494

  88. ‌#define NGX_HTTP_REQUEST_HEADER_TOO_LARGE  494

  89. ‌#define NGX_HTTPS_CERT_ERROR               495
  90. ‌#define NGX_HTTPS_NO_CERT                  496

  91. /*
  92. * We use the special code for the plain HTTP requests that are sent to
  93. * HTTPS port to distinguish it from 4XX in an error page redirection
  94. */
  95. ‌#define NGX_HTTP_TO_HTTPS                  497

  96. /* 498 is the canceled code for the requests with invalid host name */

  97. /*
  98. * HTTP does not define the code for the case when a client closed
  99. * the connection while we are processing its request so we introduce
  100. * own code to log such situation when a client has closed the connection
  101. * before we even try to send the HTTP header to it
  102. */
  103. ‌#define NGX_HTTP_CLIENT_CLOSED_REQUEST     499


  104. ‌#define NGX_HTTP_INTERNAL_SERVER_ERROR     500
  105. ‌#define NGX_HTTP_NOT_IMPLEMENTED           501
  106. ‌#define NGX_HTTP_BAD_GATEWAY               502
  107. ‌#define NGX_HTTP_SERVICE_UNAVAILABLE       503
  108. ‌#define NGX_HTTP_GATEWAY_TIME_OUT          504
  109. ‌#define NGX_HTTP_VERSION_NOT_SUPPORTED     505
  110. ‌#define NGX_HTTP_INSUFFICIENT_STORAGE      507


  111. ‌#define NGX_HTTP_LOWLEVEL_BUFFERED         0xf0
  112. ‌#define NGX_HTTP_WRITE_BUFFERED            0x10
  113. ‌#define NGX_HTTP_GZIP_BUFFERED             0x20
  114. ‌#define NGX_HTTP_SSI_BUFFERED              0x01
  115. ‌#define NGX_HTTP_SUB_BUFFERED              0x02
  116. ‌#define NGX_HTTP_COPY_BUFFERED             0x04


  117. ‌typedef enum {
  118.     NGX_HTTP_INITING_REQUEST_STATE = 0,
  119.     NGX_HTTP_READING_REQUEST_STATE,
  120.     NGX_HTTP_PROCESS_REQUEST_STATE,

  121.     NGX_HTTP_CONNECT_UPSTREAM_STATE,
  122.     NGX_HTTP_WRITING_UPSTREAM_STATE,
  123.     NGX_HTTP_READING_UPSTREAM_STATE,

  124.     NGX_HTTP_WRITING_REQUEST_STATE,
  125.     NGX_HTTP_LINGERING_CLOSE_STATE,
  126.     NGX_HTTP_KEEPALIVE_STATE
  127. ‌} ngx_http_state_e;


  128. ‌typedef struct {
  129.     ngx_str_t                         name;
  130.     ngx_uint_t                        offset;
  131.     ngx_http_header_handler_pt        handler;
  132. ‌} ngx_http_header_t;


  133. ‌typedef struct {
  134.     ngx_str_t                         name;
  135.     ngx_uint_t                        offset;
  136. ‌} ngx_http_header_out_t;


  137. ‌typedef struct {
  138.     ngx_list_t                        headers;
  139.     ngx_uint_t                        count;

  140.     ngx_table_elt_t                  *host;
  141.     ngx_table_elt_t                  *connection;
  142.     ngx_table_elt_t                  *if_modified_since;
  143.     ngx_table_elt_t                  *if_unmodified_since;
  144.     ngx_table_elt_t                  *if_match;
  145.     ngx_table_elt_t                  *if_none_match;
  146.     ngx_table_elt_t                  *user_agent;
  147.     ngx_table_elt_t                  *referer;
  148.     ngx_table_elt_t                  *content_length;
  149.     ngx_table_elt_t                  *content_range;
  150.     ngx_table_elt_t                  *content_type;

  151.     ngx_table_elt_t                  *range;
  152.     ngx_table_elt_t                  *if_range;

  153.     ngx_table_elt_t                  *transfer_encoding;
  154.     ngx_table_elt_t                  *te;
  155.     ngx_table_elt_t                  *expect;
  156.     ngx_table_elt_t                  *upgrade;

  157. #if (NGX_HTTP_GZIP || NGX_HTTP_HEADERS)
  158.     ngx_table_elt_t                  *accept_encoding;
  159.     ngx_table_elt_t                  *via;
  160. #endif

  161.     ngx_table_elt_t                  *authorization;
  162.     ngx_table_elt_t                  *proxy_authorization;

  163.     ngx_table_elt_t                  *keep_alive;

  164. #if (NGX_HTTP_X_FORWARDED_FOR)
  165.     ngx_table_elt_t                  *x_forwarded_for;
  166. #endif

  167. #if (NGX_HTTP_REALIP)
  168.     ngx_table_elt_t                  *x_real_ip;
  169. #endif

  170. #if (NGX_HTTP_HEADERS)
  171.     ngx_table_elt_t                  *accept;
  172.     ngx_table_elt_t                  *accept_language;
  173. #endif

  174. #if (NGX_HTTP_DAV)
  175.     ngx_table_elt_t                  *depth;
  176.     ngx_table_elt_t                  *destination;
  177.     ngx_table_elt_t                  *overwrite;
  178.     ngx_table_elt_t                  *date;
  179. #endif

  180.     ngx_table_elt_t                  *cookie;

  181.     ngx_str_t                         user;
  182.     ngx_str_t                         passwd;

  183.     ngx_str_t                         server;
  184.     off_t                             content_length_n;
  185.     time_t                            keep_alive_n;

  186.     unsigned                          connection_type:2;
  187.     unsigned                          chunked:1;
  188.     unsigned                          multi:1;
  189.     unsigned                          multi_linked:1;
  190.     unsigned                          msie:1;
  191.     unsigned                          msie6:1;
  192.     unsigned                          opera:1;
  193.     unsigned                          gecko:1;
  194.     unsigned                          chrome:1;
  195.     unsigned                          safari:1;
  196.     unsigned                          konqueror:1;
  197. ‌} ngx_http_headers_in_t;


  198. ‌typedef struct {
  199.     ngx_list_t                        headers;
  200.     ngx_list_t                        trailers;

  201.     ngx_uint_t                        status;
  202.     ngx_str_t                         status_line;

  203.     ngx_table_elt_t                  *server;
  204.     ngx_table_elt_t                  *date;
  205.     ngx_table_elt_t                  *content_length;
  206.     ngx_table_elt_t                  *content_encoding;
  207.     ngx_table_elt_t                  *location;
  208.     ngx_table_elt_t                  *refresh;
  209.     ngx_table_elt_t                  *last_modified;
  210.     ngx_table_elt_t                  *content_range;
  211.     ngx_table_elt_t                  *accept_ranges;
  212.     ngx_table_elt_t                  *www_authenticate;
  213.     ngx_table_elt_t                  *proxy_authenticate;
  214.     ngx_table_elt_t                  *expires;
  215.     ngx_table_elt_t                  *etag;

  216.     ngx_table_elt_t                  *cache_control;
  217.     ngx_table_elt_t                  *link;

  218.     ngx_str_t                        *override_charset;

  219.     size_t                            content_type_len;
  220.     ngx_str_t                         content_type;
  221.     ngx_str_t                         charset;
  222.     u_char                           *content_type_lowcase;
  223.     ngx_uint_t                        content_type_hash;

  224.     off_t                             content_length_n;
  225.     off_t                             content_offset;
  226.     time_t                            date_time;
  227.     time_t                            last_modified_time;
  228. ‌} ngx_http_headers_out_t;


  229. ‌typedef void (*ngx_http_client_body_handler_pt)(ngx_http_request_t *r);

  230. ‌typedef struct {
  231.     ngx_temp_file_t                  *temp_file;
  232.     ngx_chain_t                      *bufs;
  233.     ngx_buf_t                        *buf;
  234.     off_t                             rest;
  235.     off_t                             received;
  236.     ngx_chain_t                      *free;
  237.     ngx_chain_t                      *busy;
  238.     ngx_http_chunked_t               *chunked;
  239.     ngx_http_client_body_handler_pt   post_handler;
  240.     unsigned                          filter_need_buffering:1;
  241.     unsigned                          last_sent:1;
  242.     unsigned                          last_saved:1;
  243. ‌} ngx_http_request_body_t;


  244. ‌typedef struct ngx_http_addr_conf_s  ngx_http_addr_conf_t;

  245. ‌typedef struct {
  246.     ngx_http_addr_conf_t             *addr_conf;
  247.     ngx_http_conf_ctx_t              *conf_ctx;

  248. #if (NGX_HTTP_SSL || NGX_COMPAT)
  249.     ngx_str_t                        *ssl_servername;
  250. #if (NGX_PCRE)
  251.     ngx_http_regex_t                 *ssl_servername_regex;
  252. #endif
  253. #endif

  254.     ngx_chain_t                      *busy;
  255.     ngx_int_t                         nbusy;

  256.     ngx_chain_t                      *free;

  257.     ngx_msec_t                        keepalive_timeout;

  258.     unsigned                          ssl:1;
  259.     unsigned                          proxy_protocol:1;
  260. ‌} ngx_http_connection_t;


  261. ‌typedef void (*ngx_http_cleanup_pt)(void *data);

  262. ‌typedef struct ngx_http_cleanup_s  ngx_http_cleanup_t;

  263. ‌struct ngx_http_cleanup_s {
  264.     ngx_http_cleanup_pt               handler;
  265.     void                             *data;
  266.     ngx_http_cleanup_t               *next;
  267. };


  268. ‌typedef ngx_int_t (*ngx_http_post_subrequest_pt)(ngx_http_request_t *r,
  269.     void *data, ngx_int_t rc);

  270. ‌typedef struct {
  271.     ngx_http_post_subrequest_pt       handler;
  272.     void                             *data;
  273. ‌} ngx_http_post_subrequest_t;


  274. ‌typedef struct ngx_http_postponed_request_s  ngx_http_postponed_request_t;

  275. ‌struct ngx_http_postponed_request_s {
  276.     ngx_http_request_t               *request;
  277.     ngx_chain_t                      *out;
  278.     ngx_http_postponed_request_t     *next;
  279. };


  280. ‌typedef struct ngx_http_posted_request_s  ngx_http_posted_request_t;

  281. ‌struct ngx_http_posted_request_s {
  282.     ngx_http_request_t               *request;
  283.     ngx_http_posted_request_t        *next;
  284. };


  285. ‌typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r);
  286. ‌typedef void (*ngx_http_event_handler_pt)(ngx_http_request_t *r);


  287. ‌struct ngx_http_request_s {
  288.     uint32_t                          signature;         /* "HTTP" */

  289.     ngx_connection_t                 *connection;

  290.     void                            **ctx;
  291.     void                            **main_conf;
  292.     void                            **srv_conf;
  293.     void                            **loc_conf;

  294.     ngx_http_event_handler_pt         read_event_handler;
  295.     ngx_http_event_handler_pt         write_event_handler;

  296. #if (NGX_HTTP_CACHE)
  297.     ngx_http_cache_t                 *cache;
  298. #endif

  299.     ngx_http_upstream_t              *upstream;
  300.     ngx_array_t                      *upstream_states;
  301.                                          /* of ngx_http_upstream_state_t */

  302.     ngx_pool_t                       *pool;
  303.     ngx_buf_t                        *header_in;

  304.     ngx_http_headers_in_t             headers_in;
  305.     ngx_http_headers_out_t            headers_out;

  306.     ngx_http_request_body_t          *request_body;

  307.     time_t                            lingering_time;
  308.     time_t                            start_sec;
  309.     ngx_msec_t                        start_msec;

  310.     ngx_uint_t                        method;
  311.     ngx_uint_t                        http_version;

  312.     ngx_str_t                         request_line;
  313.     ngx_str_t                         uri;
  314.     ngx_str_t                         args;
  315.     ngx_str_t                         exten;
  316.     ngx_str_t                         unparsed_uri;

  317.     ngx_str_t                         method_name;
  318.     ngx_str_t                         http_protocol;
  319.     ngx_str_t                         schema;

  320.     ngx_chain_t                      *out;
  321.     ngx_http_request_t               *main;
  322.     ngx_http_request_t               *parent;
  323.     ngx_http_postponed_request_t     *postponed;
  324.     ngx_http_post_subrequest_t       *post_subrequest;
  325.     ngx_http_posted_request_t        *posted_requests;

  326.     ngx_int_t                         phase_handler;
  327.     ngx_http_handler_pt               content_handler;
  328.     ngx_uint_t                        access_code;

  329.     ngx_http_variable_value_t        *variables;

  330. #if (NGX_PCRE)
  331.     ngx_uint_t                        ncaptures;
  332.     int                              *captures;
  333.     u_char                           *captures_data;
  334. #endif

  335.     size_t                            limit_rate;
  336.     size_t                            limit_rate_after;

  337.     /* used to learn the Apache compatible response length without a header */
  338.     size_t                            header_size;

  339.     off_t                             request_length;

  340.     ngx_uint_t                        err_status;

  341.     ngx_http_connection_t            *http_connection;
  342.     ngx_http_v2_stream_t             *stream;
  343.     ngx_http_v3_parse_t              *v3_parse;

  344.     ngx_http_log_handler_pt           log_handler;

  345.     ngx_http_cleanup_t               *cleanup;

  346.     in_port_t                         port;

  347.     unsigned                          count:16;
  348.     unsigned                          subrequests:8;
  349.     unsigned                          blocked:8;

  350.     unsigned                          aio:1;

  351.     unsigned                          http_state:4;

  352.     /* URI with "/." and on Win32 with "//" */
  353.     unsigned                          complex_uri:1;

  354.     /* URI with "%" */
  355.     unsigned                          quoted_uri:1;

  356.     /* URI with "+" */
  357.     unsigned                          plus_in_uri:1;

  358.     /* URI with empty path */
  359.     unsigned                          empty_path_in_uri:1;

  360.     unsigned                          invalid_header:1;

  361.     unsigned                          add_uri_to_alias:1;
  362.     unsigned                          valid_location:1;
  363.     unsigned                          valid_unparsed_uri:1;
  364.     unsigned                          uri_changed:1;
  365.     unsigned                          uri_changes:4;

  366.     unsigned                          request_body_in_single_buf:1;
  367.     unsigned                          request_body_in_file_only:1;
  368.     unsigned                          request_body_in_persistent_file:1;
  369.     unsigned                          request_body_in_clean_file:1;
  370.     unsigned                          request_body_file_group_access:1;
  371.     unsigned                          request_body_file_log_level:3;
  372.     unsigned                          request_body_no_buffering:1;

  373.     unsigned                          subrequest_in_memory:1;
  374.     unsigned                          waited:1;

  375. #if (NGX_HTTP_CACHE)
  376.     unsigned                          cached:1;
  377. #endif

  378. #if (NGX_HTTP_GZIP)
  379.     unsigned                          gzip_tested:1;
  380.     unsigned                          gzip_ok:1;
  381.     unsigned                          gzip_vary:1;
  382. #endif

  383. #if (NGX_PCRE)
  384.     unsigned                          realloc_captures:1;
  385. #endif

  386.     unsigned                          proxy:1;
  387.     unsigned                          bypass_cache:1;
  388.     unsigned                          no_cache:1;

  389.     /*
  390.      * instead of using the request context data in
  391.      * ngx_http_limit_conn_module and ngx_http_limit_req_module
  392.      * we use the bit fields in the request structure
  393.      */
  394.     unsigned                          limit_conn_status:2;
  395.     unsigned                          limit_req_status:3;

  396.     unsigned                          limit_rate_set:1;
  397.     unsigned                          limit_rate_after_set:1;

  398. #if 0
  399.     unsigned                          cacheable:1;
  400. #endif

  401.     unsigned                          pipeline:1;
  402.     unsigned                          chunked:1;
  403.     unsigned                          header_only:1;
  404.     unsigned                          expect_trailers:1;
  405.     unsigned                          keepalive:1;
  406.     unsigned                          lingering_close:1;
  407.     unsigned                          discard_body:1;
  408.     unsigned                          reading_body:1;
  409.     unsigned                          internal:1;
  410.     unsigned                          error_page:1;
  411.     unsigned                          filter_finalize:1;
  412.     unsigned                          post_action:1;
  413.     unsigned                          request_complete:1;
  414.     unsigned                          request_output:1;
  415.     unsigned                          header_sent:1;
  416.     unsigned                          response_sent:1;
  417.     unsigned                          expect_tested:1;
  418.     unsigned                          root_tested:1;
  419.     unsigned                          done:1;
  420.     unsigned                          logged:1;
  421.     unsigned                          terminated:1;

  422.     unsigned                          buffered:4;

  423.     unsigned                          main_filter_need_in_memory:1;
  424.     unsigned                          filter_need_in_memory:1;
  425.     unsigned                          filter_need_temporary:1;
  426.     unsigned                          preserve_body:1;
  427.     unsigned                          allow_ranges:1;
  428.     unsigned                          subrequest_ranges:1;
  429.     unsigned                          single_range:1;
  430.     unsigned                          disable_not_modified:1;
  431.     unsigned                          stat_reading:1;
  432.     unsigned                          stat_writing:1;
  433.     unsigned                          stat_processing:1;

  434.     unsigned                          background:1;
  435.     unsigned                          health_check:1;

  436.     /* used to parse HTTP headers */

  437.     ngx_uint_t                        state;

  438.     ngx_uint_t                        header_hash;
  439.     ngx_uint_t                        lowcase_index;
  440.     u_char                            lowcase_header[NGX_HTTP_LC_HEADER_LEN];

  441.     u_char                           *header_name_start;
  442.     u_char                           *header_name_end;
  443.     u_char                           *header_start;
  444.     u_char                           *header_end;

  445.     /*
  446.      * a memory that can be reused after parsing a request line
  447.      * via ngx_http_ephemeral_t
  448.      */

  449.     u_char                           *uri_start;
  450.     u_char                           *uri_end;
  451.     u_char                           *uri_ext;
  452.     u_char                           *args_start;
  453.     u_char                           *request_start;
  454.     u_char                           *request_end;
  455.     u_char                           *method_end;
  456.     u_char                           *schema_start;
  457.     u_char                           *schema_end;
  458.     u_char                           *host_start;
  459.     u_char                           *host_end;

  460.     unsigned                          http_minor:16;
  461.     unsigned                          http_major:16;
  462. };


  463. ‌typedef struct {
  464.     ngx_http_posted_request_t         terminal_posted_request;
  465. ‌} ngx_http_ephemeral_t;


  466. ‌#define ngx_http_ephemeral(r)   (void *) (&r->uri_start)

  467. ‌#define ngx_http_proxy_auth(r)  ((r)->method == NGX_HTTP_CONNECT)


  468. extern ngx_http_header_t       ngx_http_headers_in[];
  469. extern ngx_http_header_out_t   ngx_http_headers_out[];


  470. ‌#define ngx_http_set_log_request(log, r)                                      \
  471.     ((ngx_http_log_ctx_t *) log->data)->current_request = r


  472. #endif /* _NGX_HTTP_REQUEST_H_INCLUDED_ */