我觉得我要问这样一个简单的问题最终会很尴尬,但是我已经研究了好几天,并且无法提供任何有用的信息。
什么决定服务器发送的HTTP响应标头?如果我控制服务器(如果需要具体性,比如说Apache),那么我可以编辑哪个文件来更改响应头?例如,将其设置为包括Content-Length
而不是Transfer-Encoding: chunked
?
我知道可以使用PHP和Java Servlet处理标头。但是,响应标头的存在和内容是HTTP的基础,因此应该存在一种无需使用外部技术即可编辑响应标头的方法,不是吗?
某些标题是自动设置的。它们是HTTP规范的一部分,服务器会为您处理。这就是Web服务器的用途,也是为什么它不同于FTP服务器或文件共享的原因。例如,Content-Length可以由Web服务器轻松计算,并且需要进行设置,以便服务器可以做到。
某些其他标头是根据config设置的。Apache通常会加载一个主要的配置文件(通常称为httpd.conf或apache2.conf),但是,为了将该文件保存为一个麻烦的文件,通常会从该文件中加载其他文件。这些文件只是带有配置文本行以更改服务器行为的文本文件。其他Web服务器可能使用XML配置文件,并且可能具有GUI来控制配置(例如IIS)
因此,对于某些标头,您可能未显式设置标头值,但您基本上配置了服务器,然后服务器使用该配置来确定要发送的适当标头。例如,您可以将服务器配置为gzip某些文件(例如,文本文件而不是已压缩的jpg)。在Apache中,这由mod_deflate模块处理以及它为您提供的配置选项。将适当的配置添加到服务器配置后,服务器将进行必要的处理(例如,将文件gzip压缩或不压缩,取决于类型),然后自动添加标头。因此,Apache模块从根本上改变了服务器的工作方式,并且可能也可能不会设置标头。另一个示例是发送缓存头以告诉浏览器要缓存文件多长时间。这是通过添加mod_expiries模块及其允许的所有配置选项来控制的。尽管其中一些标头可以进行硬编码(例如Cache-Control),但其他标头取决于Apache进行计算(例如Expires),因此最好使用模块根据您的配置为您执行此操作。
最后,您可以在服务器中显式设置标头(在Apache中,使用mod_headers模块即可完成)。这对于添加到浏览器中的新功能(例如HSTS,CSP或HPKP)很有用,在这些功能中,服务器不需要执行任何操作,而只需添加标头,客户端(例如Web浏览器)便知道如何使用它们。例如,可以通过将以下配置添加到httpd.conf中来添加JonahHuron标头:
Header always set JonahHuron "Some Value"
至于是否使用该标头,完全取决于接收响应的程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句