http的header的key中包含特殊符号
问题
和某安全认证对接,使用反向代理的方式来访问我们的系统,所有请求会被附加一些新的header过来,通过header中的信息来进行认证鉴权。
但是对接调试时发现,没有收到请求头信息,很是奇怪。经过尝试,返现如果header的key包含小数点(例如:abc.edf)这种头才会丢失。
分析
我们的程序架构:在最前面是haproxy做反向代理,后面是python跑在httpd中。
经过测试发现,应该是httpd过滤掉了相关头,任务这样的名称是不安全的。
解决
幸好前面haproxy没有问题,那么我们就可以通过haproxy来重写一下header,使他符合命名规范即可。
我们可以使用http-request set-header 新增一个header,例子如下:
frontend portalserver_console
bind *:443 ssl crt /etc/pki/tls/private/ca.pem
redirect scheme https if !{ ssl_fc }
reqadd X-Forwarded-Proto:\ https
http-request set-header NEW-XXX-DDD %[req.fhdr(xxx.ddd)]
default_backend httpserver
这样,我们就将无法收到的xxx.ddd
头转换成NEW-XXX-DDD
了,这样我们的程序中就能够收到想要的数据了。