簡體   English   中英

服務器如何設置HTTP響應頭?

[英]How do servers set HTTP response headers?

我覺得我最后會因為問這么簡單的問題而感到尷尬,但我已經研究了幾天而且沒有任何有用的信息。

什么決定了服務器發送的HTTP響應頭? 如果我控制服務器(如果我們需要具體性,讓我們說Apache),那么我可以編輯哪個文件來更改響應頭? 例如,要將其設置為包含Content-Length而不是Transfer-Encoding: chunked

我知道PHP和Java Servlet可以用來操作頭文件。 響應頭的存在和內容是HTTP的基礎,所以應該存在一種不使用外部技術來編輯這些的方法,不是嗎?

某些標題會自動設置。 它們是HTTP規范的一部分,服務器會為您處理它們。 這就是Web服務器的用途以及它與FTP服務器或文件共享的不同之處。 例如,內容長度很容易由網絡服務器計算,需要設置,以便服務器就可以完成。

某些其他標頭是基於配置設置的。 Apache通常加載一個主配置文件(通常稱為httpd.conf或apache2.conf)但是,為了保存這個文件進入一個大的笨拙的混亂,它經常加載其中的其他文件。 這些文件只是帶有配置文本行的文本文件,用於更改服務器的行為。 其他Web服務器可能使用XML配置文件,並且可能具有GUI來控制配置(例如IIS)

因此,對於某些標頭,您可能沒有顯式設置標頭值,但您基本上配置了服務器,然后使用該配置來確定要發送的相應標頭。 例如,您可以將服務器配置為gzip某些文件(例如文本文件,但不是已壓縮的jpgs)。 在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"

至於是否使用該標頭完全取決於接收響應的程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM