實體首部字段是包含在請求報文和響應(yīng)報文中的實體部分所使用的首部,用于補充內(nèi)容的更新時間等與實體相關(guān)的信息。
首部字段Allow用于通知客戶端能夠支持Request-URI指定資源的所有HTTP方法。當(dāng)服務(wù)器接收到不支持的HTTP方法時,會以狀態(tài)碼405 Method Not Allowed作為響應(yīng)返回。與此同時,還會把所有能支持的HTTP方法寫入首部字段Allow后返回。
首部字段Content-Encoding會告知客戶端服務(wù)器對實體的主體部分選用的內(nèi)容編碼方式。內(nèi)容編碼是指在不丟失實體信息的前提下所進(jìn)行的壓縮。
主要采用以下4種內(nèi)容編碼的方式。
首部字段Content-Language會告知客戶端,實體主體使用的自然語言(指中文或英文等語言)。
首部字段Content-Length表明了實體主體部分的大?。▎挝皇亲止?jié))。對實體主體進(jìn)行內(nèi)容編碼傳輸時,不能再使用Content-Length首部字段。由于實體主體大小的計算方法略微復(fù)雜,所以在此不再展開。
首部字段Content-Location給出與報文主體部分相對應(yīng)的URI。和首部字段Location不同,Content-Location表示的是報文主體返回資源對應(yīng)的URI。
比如,對于使用首部字段Accept-Language的服務(wù)器驅(qū)動型請求,當(dāng)返回的頁面內(nèi)容與實際請求的對象不同時,首部字段Content-Location內(nèi)會寫明URI。(訪問http://www.hackr.jp/返回的對象卻是http://www.hackr.jp/index-ja.html等類似情況)
首部字段Content-MD5是一串由MD5算法生成的值,其目的在于檢查報文主體在傳輸過程中是否保持完整,以及確認(rèn)傳輸?shù)竭_(dá)。
對報文主體執(zhí)行MD5算法獲得的128位二進(jìn)制數(shù),再通過Base64編碼后將結(jié)果寫入Content-MD5字段值。由于HTTP首部無法記錄二進(jìn)制值,所以要通過Base64編碼處理。為確保報文的有效性,作為接收方的客戶端會對報文主體再執(zhí)行一次相同的MD5算法。計算出的值與字段值作比較后,即可判斷出報文主體的準(zhǔn)確性。
采用這種方法,對內(nèi)容上的偶發(fā)性改變是無從查證的,也無法檢測出惡意篡改。其中一個原因在于,內(nèi)容如果能夠被篡改,那么同時意味著Content-MD5也可重新計算然后被篡改。所以處在接收階段的客戶端是無法意識到報文主體以及首部字段Content-MD5是已經(jīng)被篡改過的。
針對范圍請求,返回響應(yīng)時使用的首部字段Content-Range,能告知客戶端作為響應(yīng)返回的實體的哪個部分符合范圍請求。字段值以字節(jié)為單位,表示當(dāng)前發(fā)送部分及整個實體大小。
首部字段Content-Type說明了實體主體內(nèi)對象的媒體類型。和首部字段Accept一樣,字段值用type/subtype形式賦值。
參數(shù)charset使用iso-8859-1或euc-jp等字符集進(jìn)行賦值。
首部字段Expires會將資源失效的日期告知客戶端。緩存服務(wù)器在接收到含有首部字段Expires的響應(yīng)后,會以緩存來應(yīng)答請求,在Expires字段值指定的時間之前,響應(yīng)的副本會一直被保存。當(dāng)超過指定的時間后,緩存服務(wù)器在請求發(fā)送過來時,會轉(zhuǎn)向源服務(wù)器請求資源。
源服務(wù)器不希望緩存服務(wù)器對資源緩存時,最好在Expires字段內(nèi)寫入與首部字段Date相同的時間值。
但是,當(dāng)首部字段Cache-Control有指定max-age指令時,比起首部字段Expires,會優(yōu)先處理max-age指令。
首部字段Last-Modified指明資源最終修改的時間。一般來說,這個值就是Request-URI指定資源被修改的時間。但類似使用CGI腳本進(jìn)行動態(tài)數(shù)據(jù)處理時,該值有可能會變成數(shù)據(jù)最終修改時的時間。