首页
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了,这样我们的程序中就能够收到想要的数据了。