服务器如何设置HTTP响应头?

时间:2016-02-22 21:56:42

标签: apache http http-headers

我觉得我最后会因为问这么简单的问题而感到尴尬,但我已经研究了几天而且没有任何有用的信息。

什么决定了服务器发送的HTTP响应头?如果我控制服务器(如果我们需要具体性,让我们说Apache),那么我可以编辑哪个文件来更改响应头?例如,要将其设置为包含Content-Length而不是Transfer-Encoding: chunked

我知道PHP和Java Servlet可以用来操纵头文件。响应头的存在和内容是HTTP的基础,所以应该存在一种不使用外部技术来编辑它们的方法,不是吗?

1 个答案:

答案 0 :(得分:8)

自动设置某些标头。它们是HTTP规范的一部分,服务器会为您处理它们。这就是Web服务器的用途以及它与FTP服务器或文件共享的不同之处。例如,内容长度很容易由网络服务器计算,需要设置,以便服务器就这样做。

根据配置设置某些其他标头。 Apache通常加载一个主配置文件(通常称为httpd.conf或apache2.conf)但是,为了保存这个文件进入一个大的笨拙的混乱,它经常加载其中的其他文件。这些文件只是带有配置文本行的文本文件,用于更改服务器的行为。其他Web服务器可能使用XML配置文件,并且可能具有GUI来控制配置(例如IIS)

因此,对于某些标头,您可能没有显式设置标头值,但您基本上配置了服务器,然后使用该配置来确定要发送的相应标头。例如,您可以将服务器配置为gzip某些文件(例如文本文件,但不是已压缩的jpgs)。在Apache中,这由mod_deflate module及其为您提供的配置选项处理。将适当的配置添加到服务器配置后,服务器将执行必要的处理(例如,根据类型对文件进行gzip),然后自动添加标头。因此,Apache模块基本上可以改变服务器的工作方式,这可能也可能不会设置标头。另一个例子是发送缓存头以告诉浏览器缓存文件的时间。这是通过添加mod_expiries module及其允许的所有配置选项来控制的。虽然其中一些标题可能是硬编码的(例如Cache-Control),但其他标题依赖于Apache进行计算(例如Expires),因此最好根据您的配置使用模块为您执行此操作。

最后,您可以在服务器中显式设置标头(在Apache中,这是使用mod_headers模块完成的)。这对于添加到浏览器的新功能(例如HSTS,CSP或HPKP)很有用,其中服务器不需要做任何事情,只需添加标题和客户端(例如Web浏览器)知道如何处理他们。您可以添加一个JonahHuron标头,例如将此配置添加到httpd.conf:

Header always set JonahHuron "Some Value"

关于是否使用该标头完全取决于接收响应的程序。