nginxの:HTTPヘッダ処理

ここに画像を挿入説明

リクエストヘッダ

conf->ヘッダなど>ハッシュ
ヘッダフィールドproxy_set_header命令セットを、フィールド指定ngx_http_proxy_headers構造ヘッダフィールドのハッシュテーブルルックアップを形成しました。双方の紛争の内容がproxy_set_headerする場合は勝ちます。カスタマイズセクションでは、送信する必要があります。
conf->ヘッダなど>長さ:nginxのスクリプトを形成し、ヘッダ・フィールドの長さを算出します。
conf->ヘッダなど>値:nginxのスクリプト形式は、ヘッダフィールドの内容を計算します。

  • cmcf-> headers_in_hash
    構造(構造が要求ヘッダーフィールドを定義し、これらのフィールドの代入値が定義されている)ngx_http_headers_inに従って、ハッシュテーブルが初期化されます。初期化ヘッダ解析ステージR-> headers_inメンバーを要求します。

  • 解析(ngx_http_parse_header_line)

  • 処理(ngx_http_process_request_headers)
    R-> headers_in割り当てのため。見つけ出すために、R-> headers_in.headersに直接保存;。headers_in_hashはR-> headers_in.headersも>特定のフィールドをheaders_in R-保存する必要に格納見つけることができますについて invalid_headerために、例えば、「_」ヘッダフィールドは、英数字以外のヘッダフィールドを開始する構成(ignore_invalid_headers)選択を保存するかどうか、始めます。

  • 发送(U-> create_request(ngx_http_proxy_create_request))

    /*首先使用plcf->headers->values脚本,对nginx自定义字段进行发送*/
          e.ip = headers->values->elts;
          e.pos = b->last;
          e.request = r;
          e.flushed = 1;
          le.ip = headers->lengths->elts;
          while (*(uintptr_t *) le.ip) {
          }
          
      /*根据pass_request_headers配置(默认使能),将r->headers_in.headers中保存的原始报文的头字段进行发送,在发送前,首先用变量名查询conf->headers->hash哈希表,如果原始字段和自定义字段冲突,已自定义字段为准*/
          if (plcf->upstream.pass_request_headers) {
           
          }
    

ここに画像を挿入説明

第二に、応答ヘッダ

  • 读取(ngx_http_proxy_process_header)
    umcf->headers_in_hash哈希表:ngx_http_upstream_init_main_conf函数会根据ngx_http_upstream_headers_in结构体(该结构体定义一些响应头字段,并定义这些字段的赋值方法),对该哈希表进行初始化。当解析结束后,nginx使用解析到的头字段name查询上述哈希表,并通过相对应的handler方法,对r->upstream->headers_in.xxx赋值。

     hh = ngx_hash_find(&umcf->headers_in_hash, h->hash,
                        h->lowcase_key, h->key.len);
      
     if (hh && hh->handler(r, h, hh->offset) != NGX_OK) {
         return NGX_ERROR;
     }
    

    给r->upstream->headers_in.headers增加“server”和“date”字段。

  • 解析(ngx_http_parse_header_line)

  • 存储(r->upstream->headers_in.headers(ngx_http_upstream_headers_in_t))

  • 処理(ngx_http_upstream_process_headers)
    ヘッド構造ngx_http_request_tで解析リクエストheaders_outメンバーに提供されています。
    U-> CONF - > hide_headers_hash:ヘッダフィールド命令セット、及びクライアントへの送信を禁止する応答してヘッダーフィールドを設定するために、ハッシュテーブルを形成するngx_http_proxy_hide_headers構造を指定するフィールドproxy_hide_header。しかしながらproxy_pass_header指定されたヘッダフィールドセットは例外として設定され、それが禁止から除外されます。
    フィールドがumcf-> headers_in_hash、コールhh-> copy_handler方法に存在する場合、コンテンツはR-> headers_outにコピー。フィールドが存在しない場合や、そのコピーは直接> headers_out.headersをR-します。

  • 送信(ngx_http_header_filter)

おすすめ

転載: blog.csdn.net/u013032097/article/details/91385419