ホームページ  >  記事  >  バックエンド開発  >  第 19 条: Nginx での http リクエストまたはレスポンスへのヘッダー フィールドの追加

第 19 条: Nginx での http リクエストまたはレスポンスへのヘッダー フィールドの追加

WBOY
WBOYオリジナル
2016-08-08 09:19:122205ブラウズ

転載歓迎、出典を明記してください http://blog.csdn.net/yankai0219/article/details/8270219

123344

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_headers_out_t 構造内にあります。調べてみると、その中に md5 ヘッダー フィールドがないことがわかりました。これは、http プロトコルが md5 ヘッダー フィールドをサポートしていないことを意味しますか?

構造体フィールド。 nginx 作者の説明 http://mailman.nginx.org/pipermail/nginx/2008-April/006251.html では、Nginx は本当に md5 ヘッダーフィールドをサポートしていないのでしょうか?確認の結果、アップロード モジュールが content-md5 ヘッダー フィールドをサポートしていることがわかりました。ということは、nginx は content-md5 をサポートしているということですが、どうやって実装すればよいのでしょうか? 要約: 1) http プロトコルは md5 ヘッダー フィールドをサポートします 2) Nginx は content-md5 をサポートします1. アップロード モジュールにヘッダー フィールドを追加します

nginx アップロード モジュールの

ngx_http_upload_add_header を通じて

設定ファイルを解析します ヘッダー フィールドを保存します

ulcf->

header_templates を呼び出してから、ngx_http_upload_add_headers 関数を呼び出してヘッダー フィールドを応答のヘッダーに追加します。次に、それが応答ヘッダーにどのように追加されるかを分析します。 Nginx アップロード モジュールのソース コードで ngx_http_upload_add_headers 関数を確認できます。 プロセスは次のとおりです: 1) ulcf->

header_templates

のヘッダーフィールドを解析します。 2) ngx_http_headers_out_t

で headers_out の ngx_list_t ヘッダーに要素を追加します。 3) 新しく追加した要素の値を入力します。 : r, ngx_http_upload_loc_conf_t *

ulcf

)

{
/ * {{{ */

-> headers_out.headers ); // 内 ngx_http_headers_out_t headers_out の ngx_list_t t;ハッシュ=1

;

h->key. レン=名前. len; ->key.data

=

name

.data;

h->value.len = value.len;

h->.データ = .データ;

......................................

} /* }}} */

2.ngx_http_headers_out_t用のNginx headers_out.headers メンバー変数の処理

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

上記では、記事 19: Nginx での http リクエストまたはレスポンスへのヘッダー フィールドの追加について、関連する内容を含めて紹介しています。PHP チュートリアルに興味のある友人にとって役立つことを願っています。
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 ヘッダー フィールドが含まれます。パケット キャプチャを通じて、これが実際に当てはまることがわかります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。