Heim >Backend-Entwicklung >PHP-Tutorial >Artikel 19: Hinzufügen von Header-Feldern zu HTTP-Anfragen oder -Antworten in Nginx

Artikel 19: Hinzufügen von Header-Feldern zu HTTP-Anfragen oder -Antworten in Nginx

WBOY
WBOYOriginal
2016-08-08 09:19:122285Durchsuche

Willkommen beim Nachdruck und Nachdruck. Bitte geben Sie die Quelle an: http://blog.csdn.net/yankai0219/article/details/8270219

0.序1.upload模块中添加头部字段

2.Nginx对于ngx_http_headers_out_t  headers_out.headers成员变量的处理

            1)请求:

            2)响应:

3.向请求或者响应中添加头部字段

            1)程序 在请求中添加头部字段 helloHeaders 内容123344

0. Header-Felder im Upload-Modul hinzufügen2. Verarbeitung von Headern-Mitgliedsvariablen Header-Feld helloHeaders Inhalt 123344

0. Vorwort

Je nach Projektanforderungen müssen Sie das MD5-Header-Feld der Datei hinzufügen die http-Antwort. Wie wir alle wissen, liegen die Header-Felder der Nginx-Antwort alle in der Struktur ngx_http_headers_out_t vor ist kein MD5-Header darin. Bedeutet das, dass das http-Protokoll das MD5-Header-Feld nicht unterstützt?

Durch die Überprüfung des Artikels können wir feststellen, dass das http-Protokoll das MD5-Header-Feld unterstützt, Nginx jedoch ngx_http_headers_out_t Dieses Headerfeld wird nicht zur Struktur hinzugefügt. Erklärung des Nginx-Autors http://mailman.nginx.org/pipermail/nginx/2008-July/006251.html

Unterstützt Nginx also das MD5-Header-Feld wirklich nicht? Bei der Überprüfung haben wir festgestellt, dass das Upload-Modul das Headerfeld content-md5 unterstützt. Das bedeutet also, dass Nginx Content-MD5 unterstützt. Wie implementieren wir es?

Zusammenfassung: 1) HTTP-Protokoll unterstützt MD5-Header-Feld 2) Nginx unterstützt Content-MD5

1. Header-Feld im Upload-Modul hinzufügen

Analysieren Sie im Nginx-Upload-Modul die Header-Felder in der -Konfigurationsdatei über ngx_http_upload_add_header, speichern Sie sie in ulcf->header_templates und fügen Sie sie dann hinzu Fügen Sie Header-Felder dem Antwortheader hinzu, indem Sie die Funktion ngx_http_upload_add_headers aufrufen. Als nächstes analysieren wir, wie es zum Antwortheader hinzugefügt wird.

Sie können die Funktion ngx_http_upload_add_headers im Quellcode des Nginx-Upload-Moduls sehen.

Der Prozess ist: 1) Analysieren Sie das Header-Feld in ulcf->header_templates

2)Inngx_http_headers_out_t Fügen Sie ein Element zu den ngx_list_t-Headern von headers_out hinzu.

                  3) Geben Sie den Wert für das neu hinzugefügte Element ein.

statisch 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 headers); //Inngx_http_headers_out_t ngx_list_t von headers_out                                                                     🎜>h->Hash

=

1

;

->Taste.len =

Name

.len;    h->Schlüssel.Daten =

Name

.Daten ;

                h->Wert.len =  Wert.len;

                h-> value.data = value.data;

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

} /* }}} */

2.Nginx für ngx_http_headers_out_t Verarbeitung von headers_out.headers-Mitgliedsvariablen

1) Anfrage:

In der Funktion ngx_http_proxy_create_request können wir den Aufbau einer http-Anfrage sehen ( Bestehend aus drei Teilen: Anforderungszeile, Anforderungsheader und Anforderungstext. Wir müssen uns nur die Verarbeitung des Anforderungsheaders ansehen.

if (plcf->upstream.pass_request_headers) {
part = &r->headers_in.headers.part;
header = part->elts;
i = 0; > if (i >= part->nelts) {    if
(Teil->nächster == NULL) {      Pause
; }
Teil = Teil->nächster; header = part->elts; i = 0;
}
>
(ngx_hash_find(&plcf->headers_set_hash, header[i].hash,
     >                                                                                          🎜 > ;
                                                                                                                                   b->last, header[i].key.data, header[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) Antwort:

Die Verarbeitung von Headern ist ngx_http_header_filter im Modul ngx_http_header_filter_module. Der Prozess ist der Header-Verarbeitung in der Anfrage sehr ähnlich.

3. Header-Felder zur Anfrage oder Antwort hinzufügen

In den ngx_http_request_t-Mitgliedsvariablen headers_in und headers_out gibt es ngx_list_t-Header-Mitgliedsvariablen. Seine Aufgabe besteht darin, Header-Felder zu speichern. In dieser Funktion können Sie die Funktion ngx_list_push(&r->headers_out.headers) sehen, die die Header-Felder in die Antwort einfügt.

Analog dazu können Sie die Funktion ngx_list_push(&r->headers_in.headers) verwenden, um die Header-Felder in die Anfrage einzufügen.

1) Programm Header-Feld helloHeaders zum Anfrageinhalt 123344 hinzufügen

Diese Funktion befindet sich in ngx_http_proxy_handler von ngx_http_proxy_module.c

void yk_add_headers_in( ngx_http_request_t *r) { /* {{{ */
                                        printf("beginnen into yk_add_headers_in" ); 
 ngx_table_el t_t *h;    
ngx_str_t Name = ngx_string("helloHeaders" );
ngx_str_t Wert = ngx_string("123344" ); h = ngx_list_push(&r->
headers_in.headers ); >(h ==
NULL){                                            🎜>return ;
                                         h- > Hash = 1;
h-> Taste
. len = Name.
len; h-> Schlüssel.Daten = Name.
Daten; h-> Wert.len = Wert.
len;
h-> Wert.Daten = Wert.Daten;
}
#endif

Da ich den Proxy einrichte, alle Alle Anfragen werden in die Funktion ngx_http_proxy_handler eingegeben. Fügen Sie daher am Anfang der Funktion ngx_http_proxy_handler yk_add_headers_in( hinzu r), Dann haben alle Anforderungsheader das Headerfeld helloHeaders. Anhand der Paketerfassung können Sie erkennen, dass dies tatsächlich der Fall ist.

                                           Das Obige stellt Artikel 19 vor: Hinzufügen von Header-Feldern zu HTTP-Anfragen oder -Antworten in Nginx, einschließlich relevanter Inhalte. Ich hoffe, dass er für Freunde hilfreich ist, die an PHP-Tutorials interessiert sind.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn