nginx關於http header有以下三個配置。
1 proxy_set_header
https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
配置命令proxy_set_header,是在ngx_http_proxy_module里邊定義的。
用來對http request header進行修改。
2 add_header
https://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
配置命令 add_header,是在ngx_http_headers_module里邊定義的。
用來對http server返回的http response header進行修改,
修改的方法是,追加的在header的最前面。
3 add_tailer
http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_trailer
配置命令 add_tailer,是在ngx_http_headers_module里邊定義的。
功能與add_header相同,區別是添加在header的結尾。
4 http header的順序
既然有了添加到開頭或者添加到結尾的區別。那么不禁要問,http header里邊的KV結構是否存在順序區別呢?
通過閱讀rfc 2616,可以了解到如下內容:
rfc對http的header順序沒有強制要求,但是一個好的最佳實踐一般是:
依次應該為:general-header, request-header or response-header, entity-header.
The order in which header fields with differing field names are received is not significant. However,
it is "good practice" to send general-header fields first, followed by request-header
or response- header fields, and ending with the entity-header fields.
另外, 如果有多個名字相同的header存在時,“實現”應該將他們的值壓縮在一起,用逗號分隔。
逗號分隔后的內容是否包含了順序信息應該有通訊兩端定義,作為中間人的proxy不應該修改他們。
Multiple message-header fields with the same field-name MAY be present in a message if and only if
the entire field-value for that header field is defined as a comma-separated list [i.e., #(values)].
It MUST be possible to combine the multiple header fields into one "field-name: field-value" pair,
without changing the semantics of the message, by appending each subsequent field-value to the
first, each separated by a comma. The order in which header fields with the same field-name are
received is therefore significant to the interpretation of the combined field value,
and thus a proxy MUST NOT change the order of these field values when a message is forwarded.