ホームページ >バックエンド開発 >PHPチュートリアル >第 19 条: Nginx での http リクエストまたはレスポンスへのヘッダー フィールドの追加
転載歓迎、出典を明記してください http://blog.csdn.net/yankai0219/article/details/8270219
0 はじめに 1. アップロードモジュールにヘッダーフィールドを追加します 2。 ngx_http_headers_out_t の Nginx headers_out.headers メンバー変数の処理 1) リクエスト: 2) レスポンス: 3. リクエストまたはレスポンスに head フィールドを追加します 1) プログラムは head フィールド helloheaders コンテンツを追加します 123344 |
0. はじめに
プロジェクトのニーズに基づいて、ファイルの md5 ヘッダー フィールドを http 応答に追加する必要があります。ご存知のとおり、Nginx 応答のヘッダー フィールドはすべて
ngx_http_upload_add_header を通じて
設定ファイルを解析します ヘッダー フィールドを保存しますulcf->
header_templates を呼び出してから、
header_templates
のヘッダーフィールドを解析します。 2) ngx_http_headers_out_t
で
headers_out の ngx_list_t ヘッダーに要素を追加します。
ulcf
)
/ *
{{{ */ -> headers_out.headers ); // 内 ngx_http_headers_out_t headers_out の ngx_list_t t;ハッシュ=1 ; h->key. レン=名前. len; = name .data; h->value.len = value.len; h->値.データ = 値.データ; ...................................... } /* }}} */ |
2.
1) リクエスト:
ngx_http_proxy_create_request 関数では、http リクエストの構造を確認できます (リクエスト行、リクエスト ヘッダー、リクエスト本文の 3 つの部分を含みます)。必要なのはリクエストヘッダーの処理だけです。
if(plcf->gt;upstream.pass_request_headers) {
part = &r->headers_in.headers.
ヘッダー = part->elts;
= 0;
>= 部分->nelts) {
== NULL) { Break }
パート = パート- & gt; 次へ ヘッダー=part->elts;
i = 0; }
if (ngx_hash_find(&plcf->headers_set_hash,
ヘッダー[i] .hash、
;
);
*b->last++ =
' ';
b->last = ngx_copy(b->last, header[i].value.data, header[i].value.len)
}
}
|
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
void の ngx_http_proxy_handler にありますyk_add_headers_in( ngx_http_request_t*r)
{ /* {{{ */
yk_add_headers_in");
*h;
= ngx_string("helloHeaders"
); value
= ngx_string(
"123344"); h = ngx_list_push(&r->gt; headers_in .
ヘッダー ) ;
==NULL){
=
1; h->キー。
name.len
; data=
名前.
データ; h->
値。
=
値。レン;h->
value.
data;}#endif me プロキシを設定するため、すべてのリクエストが入力されますngx_http_proxy_handler 関数。したがって、ngx_http_proxy_handler 関数の先頭に
yk_add_headers_in(
r) を追加すると、すべてのリクエスト ヘッダーに helloHeaders ヘッダー フィールドが含まれます。パケット キャプチャを通じて、これが実際に当てはまることがわかります。
|