Nginx系列(二):HTTP头部处理

在这里插入图片描述

一、请求头

conf->headers->hash
将proxy_set_header指令设置的头字段,以及ngx_http_proxy_headers结构体指定的字段,形成哈希表,用于头字段查找。如果两者内容冲突,以proxy_set_header为准。自定义部分,必须发送。
conf->headers->lengths:形成nginx脚本,计算上述头字段长度。
conf->headers->values:形成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进行赋值。对于headers_in_hash能查到的,保存在r->headers_in.headers的同时还需要保存在r->headers_in具体字段;对于查不到的,直接保存在r->headers_in.headers。对于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:将proxy_hide_header指令设置的头字段,以及ngx_http_proxy_hide_headers结构体指定的字段,形成哈希表,用于设置禁止向客户端传输的响应头字段。但proxy_pass_header指定中设置的头字段将置为例外,从禁止从排除。
    如果字段存在于umcf->headers_in_hash中,则调用hh->copy_handler方法,将内容拷贝到r->headers_out。如果字段不存在与,则直接拷贝到r->headers_out.headers。

  • 发送(ngx_http_header_filter)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值