Heim >Backend-Entwicklung >PHP-Tutorial >Artikel 19: Hinzufügen von Header-Feldern zu HTTP-Anfragen oder -Antworten in Nginx
Willkommen beim Nachdruck und Nachdruck. Bitte geben Sie die Quelle an: http://blog.csdn.net/yankai0219/article/details/8270219
|
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
Durch die Überprüfung des Artikels können wir feststellen, dass das http-Protokoll das MD5-Header-Feld unterstützt, Nginx jedoch
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
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)In
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 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
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.