재인쇄 및 재인쇄를 환영합니다. 출처를 표시해 주세요. http://blog.csdn.net/yankai0219/article/details/8270219
|
0. 머리말
프로젝트 요구에 따라 파일의 md5 헤더 필드를 추가해야 합니다. http 응답. 우리 모두 알고 있듯이 Nginx 응답의 헤더 필드는 모두
기사를 확인하면 http 프로토콜은 md5 헤더 필드를 지원하지만 nginx는
1. 업로드 모듈에 헤더 필드 추가
nginx 업로드 모듈에서ngx_http_upload_add_header를 통해
ulcf->header_templates
에서 헤더 필드를 구문 분석합니다. 2)에서
정적 ngx_int_t ngx_http_upload_add_headers(ngx_http_request_t *r, ngx_http_upload_loc_conf_t *ulcf) { /* // 🎜> ngx_list_push( & r->headers_out. 헤더);
//인ngx_http_headers_out_t
headers_out의 ngx_list_t 🎜>h >-> -> 키.len = 이름.len ; h->키.데이터 = 이름.데이터 ; h->값.len = 값.len; h-> 값.데이터 = 값.데이터; .................................. } /* }}} */ |
2.Nginx for
1) 요청:
ngx_http_proxy_create_request 함수에서 http 요청의 구성을 볼 수 있습니다( 세 부분(요청 라인, 요청 헤더, 요청 본문)을 포함하여 요청 헤더 처리만 살펴보면 됩니다.
if (plcf->upstream.pass_request_headers) {
부분 = &r->headers_in.headers.part;
헤더 = 부분>elts;
i
= 0; > 만약(i
>= 부분->넬트) { if
(부분->다음
== NULL) { break
; }
부분 = 부분->다음; 헤더 = 부분->elts; i = 0;
}
> (ngx_hash_find(&plcf->headers_set_hash,
header[i].hash,
>
🎜 > ;
b->마지막, 헤더[i].key.data, 헤더[i].key.len);
*b->last++ = ':' ;
*b->last++ =
' ' ;
b->last = ngx_copy(b->last, header[i].value.data,
header[i].value. len); *b->last++ = CR; *b->last++ = LF;
...
}
}
|
2) 응답:
헤더 처리는 ngx_http_header_filter_module 모듈의 ngx_http_header_filter입니다. 이 프로세스는 요청의 헤더 처리와 매우 유사합니다.
3. 요청 또는 응답에 헤더 필드를 추가합니다.
ngx_http_request_t 멤버 변수 headers_in 및 headers_out에는 ngx_list_t 헤더 멤버 변수가 있습니다. 그 역할은 헤더 필드를 저장하는 것입니다. 이 함수에서는 헤더 필드를 응답에 넣는 ngx_list_push(&r->headers_out.headers) 함수를 볼 수 있습니다.
비유적으로 ngx_list_push(&r->headers_in.headers) 함수를 사용하여 헤더 필드를 요청에 넣을 수 있습니다.
1) 프로그램 헤더 필드 helloHeaders를 요청 Content 123344에 추가합니다
이 함수는 ngx_http_proxy_module.c의 ngx_http_proxy_handler에 있습니다
무효 yk_add_headers_in( ngx_http_request_t *r)
{ /* {{{ */
printf("시작
yk_add_headers_in" );
ngx_table_el t_t
*h;
ngx_str_t 이름
= ngx_string("helloHeaders" );
ngx_str_t 값
= ngx_string("123344" ); h = ngx_list_push(&r->
headers_in.headers ); >(h
==
NULL){ 🎜>반환 ;
} h- > 해시
=
1;
h-> 키. 렌
=
이름.len; h-> 키.데이터
=
이름.데이터; h-> 값.len
=
값.len;
h-> 값.데이터 =
값.데이터;
}
#endif
|
프록시를 설정하는 중이므로 모두 모든 요청은 ngx_http_proxy_handler 함수에 들어가므로 ngx_http_proxy_handler 함수 시작 부분에 yk_add_headers_in( 을 추가하세요. r) 그러면 모든 요청 헤더에 helloHeaders 헤더 필드가 포함됩니다. 실제로 패킷 캡처를 통해 이러한 경우를 확인할 수 있습니다.
위는 기사 19: Nginx의 http 요청 또는 응답에 헤더 필드 추가 관련 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.