[nginx][http] nginx关于http header的设置
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.
原文地址:https://www.cnblogs.com/hugetong/p/12737012.html
- Javascript 的addEventListener()及attachEvent()区别分析
- 设计模式-用接口来实现filter!梭梭就是干!
- OpenDaylight实现轮询策略的负载均衡服务
- 微服务业务开发三个难题-拆分、事务、查询(上)
- 总结了一些指针易出错的常见问题(五)
- 微服务业务开发三个难题-拆分、事务、查询(下)
- C语言之控制台读取上下左右方向键指令
- C程序之修改Windows的控制台大小
- VS2010/MFC编程(对话框:模态对话框及其弹出过程)
- 设计模式-抽象类,只是想为你做更多
- 设计模式-搞个接口,留有余地,让你我不再尴尬
- vs2010点调试,显示系统找不到指定的文件
- C++之类和对象的使用(三)
- C++之类和对象的使用(二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?处理器映射器与处理器篇
- anetTcpGenericConnect 详解
- 详解 MySQL 基准测试和sysbench工具
- 第六天:网络处理(anet部分)-- redis源码慢慢学,慢慢看【redis6.0.6】
- python爬王者荣耀壁纸
- 搞定三大神器之 Python 装饰器
- 当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?请求映射器篇
- rabbitpy使用purge不生效
- Springboot读取自定义属性之集合(list,数组)
- 被遗忘的 10 个Linux命令,很实用!
- Nginx配置中一个不起眼字符"/"的巨大作用,失之毫厘谬以千里
- 当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?SpringMVC视图处理器与视图篇章【终章】
- 求求你,别再开发的时候一用redis分布式锁,就急着去复制粘贴了!lua脚本的实现思路
- 全网最详细的 K8s Service 不能访问排查流程
- 团体程序设计天梯赛-练习集 L1-001 Hello World