HTTP响应头是什么?
举例来说,当我们通过浏览器浏览网页时,浏览器会充当客户端,并向服务器发送HTTP请求,请求所需的网页内容。服务器在收到请求后,会生成HTTP响应,并将其发送回浏览器。而HTTP响应头(HTTP Response Headers)就是HTTP响应的一部分。
为什么隐藏HTTP响应头?
隐藏HTTP响应头通常是出于安全和隐私考虑。因为HTTP响应头中可能包含有关服务器和应用程序的敏感信息,如服务器类型、版本号等。攻击者可以利用这些关键信息展开针对性的攻击。通常我们在Wordpress安全中隐藏Wordpress版本号也是出于类似考虑。
除了安全和隐私考虑,有时候隐藏特定的响应头还可能是因为响应头中出现了多个重复的响应头。响应头重复通常不是一个严重的问题,因为HTTP协议允许出现多个相同名称的响应头,而且浏览器通常会将多个响应头合并处理。但是,重复的响应头仍可能会导致一些不必要的复杂性,让一些有洁癖的站长(比如我😄)看着不舒服,那么我们可以通过一些方法来解决这个问题。
如何隐藏HTTP响应头?
隐藏HTTP响应头的方法有很多,修改Web服务器配置就是其中一种方便高效的方法。
Nginx
步骤1:找到Nginx配置文件
Nginx的配置文件通常位于以下几个位置:
- /etc/nginx/nginx.conf
- /usr/local/nginx/conf/nginx.conf
- /etc/nginx/sites–enabled/default.conf
- /etc/nginx/sites–enabled/your-domian.conf
步骤2:编辑配置文件
在Nginx配置文件中,可以使用proxy_hide_header
或add_header
指令来隐藏或添加HTTP响应头。
使用proxy_hide_header
指令隐藏特定的响应头:
隐藏X-Powered-By响应头
location / {
proxy_hide_header X-Powered-By;
}
使用Header指令添加新的响应头,覆盖原有响应头:
location / {
add_header X-Powered-By "Custom Value";
}
如果需要达到隐藏的目的,将此处的Custom Value设置为空值就好了。
案例演示
Cloudpanel管理面板创建的网站,往往会存在重复的响应头。如果你像我一样有洁癖😁,可以参考下面的方法来隐藏重复的响应头。

在网站的Nginx配置文件里,添加如下代码,隐藏Referrer-Policy,X-Content-Type-Options,X-Frame-Options,X-Permitted-Cross-Domain-Policies,X-Xss-Protection,共5个重复的响应头。
使用proxy_hide_header
指令隐藏特定的响应头:
proxy_hide_header Referrer-Policy; # Hide Referrer-Policy header
proxy_hide_header X-Content-Type-Options; # Hide X-Content-Type-Options header
proxy_hide_header X-Frame-Options; # Hide X-Frame-Options header
proxy_hide_header X-Permitted-Cross-Domain-Policies; # Hide X-Permitted-Cross-Domain-Policies header
proxy_hide_header X-Xss-Protection; # Hide X-Xss-Protection header
使用Header指令添加新的响应头,覆盖原有响应头:
add_header Referrer-Policy ""; # Remove Referrer-Policy header
add_header X-Content-Type-Options ""; # Remove X-Content-Type-Options header
add_header X-Frame-Options ""; # Remove X-Frame-Options header
add_header X-Permitted-Cross-Domain-Policies ""; # Remove X-Permitted-Cross-Domain-Policies header
add_header X-Xss-Protection ""; # Remove X-Xss-Protection header

重启Nginx后,通过浏览器重新查看响应头,会发现重复的响应头已经被隐藏了。

上面介绍的方案只是隐藏,而不是真正移除。如果需要彻底移除,可以通过修改Nginx全局配置文件。
Nginx全局配置文件通常位置为:/etc/nginx/nginx.conf
将下面的这段代码从配置文件中删除。
#add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
#add_header Content-Security-Policy "img-src 'self' data:;";
add_header X-Permitted-Cross-Domain-Policies master-only;
add_header Referrer-Policy same-origin;

注意事项
总结
本文结合了具体案例,介绍了如何隐藏响应头。如果是Apache服务器,方法会有所不同,不过大致思路是一样的,这里不再赘述。