[alibaba/tengine]http2中,server_tag off不生效

2023-12-21 795 views
6

开启http2后,配置server_tag off 仍然可见header中有server: Tengine

回答

2

这个只是隐藏版本号的,并不会隐藏你 server 的软件名字

0
server_tag      off;
server_info     off;
server_tokens   off;

都配置了,在http2.0中依然有server: Tengine响应头。 http1.1能隐藏

0

http2 service_name是属于硬编码的,所以是隐藏不了的。 你可你在src/http/v2/ngx_http_v2_filter_module.c文件里找到 static const u_char nginx[5] = "这个地方是硬编码"; 以上硬编码并非简单的16进制,使用的的是HPACK 霍夫曼编码压缩的字符串。所以你要修改话是需要HPACK编码才能得到你想要的结果

6

给你个简单方法,将下面代码拷贝到https://golang.google.cn/官网的主页Try Go就可得到你想要的结果,然后修改上述编码位置重新编译tengine就可以了。 `package main import ( "fmt" "golang.org/x/net/http2/hpack" )

func main() { fmt.Println("nginx", "→", Encode("nginx")) fmt.Println("apache", "→", Encode("apache")) fmt.Println("-----") fmt.Println("\x84\xaa\x63\x55\xe7", "→", Decode("\x84\xaa\x63\x55\xe7")) fmt.Println("\x84\x1d\x63\x24\xe5", "→", Decode("\x84\x1d\x63\x24\xe5")) }

func Encode(s string) string { var result string hd := hpack.AppendHuffmanString(nil, s) hl := hpack.HuffmanEncodeLength(s) | 0x80 result += RenderByte(byte(hl)) for _, b := range hd { result += RenderByte(b) } return result }

func Decode(s string) string { data := []byte(s) result, _ := hpack.HuffmanDecodeToString(data[1:]) return result }

func RenderByte(b byte) string { return fmt.Sprintf("\x%x", b) }`