Java實現HTTP:迴應數據包頭格式詳解

本節我們看看服務器返回給客戶端的數據包頭有什麼特點。在HTTP1.1中有9種數據包頭字段需要了解和掌握。第一個叫Accept-Ranges,他告訴客戶端服務器是否處理了包含Range請求的請求數據包。該字段以Accept-Range: bytes的形式出現,在客戶端向服務器提交數據時,它可能只提交從某個位置起的部分數據,這些數據在請求數據包中以Range字段來標明,如果服務器支持這種局部數據上傳模式,那麼他就會返回Accept-Range: x bytes表示成功接收客戶端發來的數據,如果不支持它就會以Accept-Range:none的形式告知客戶端。

第二個字段叫Age,它用於告知客戶端當前接收的資源的創建時長。第三個字段是ETag,各個字段可以讓客戶端和服務器形成某種特殊交互,後面我們再對該字段的使用進行進一步分析。第四個字段叫Location,該字段包含一個URL,它是服務器告訴客戶端通過給定的URL去獲取它想要的資源,該字段常用與重定向數據包中,重定向對應的回覆碼是301,302,或307.第五個字段爲Proxy_Authenticate,代理服務器返回給設備的回覆數據包中會使用該字段,它要求客戶端執行特定的認證操作。第七個字段是Retry-After,該字段是服務器用於告訴客戶端它的請求沒有成功執行,要求客戶端在一段時間後再重試。第八個字段爲Server,該字段用於告知客戶端服務器的相關信息,例如服務器當前運行的程序版本等。第九個字段爲WWW-Authenticate,它經常包含在服務器返回的401回覆包裏,它表示客戶端沒有認證通過,客戶端需要使用該字段包含的數據進行特定認證後才能再次向服務器發出請求。

最後我們看HTTP協議中有點令人莫名其妙的實體包頭。實體包頭所包含的信息往往用於描述被傳輸的資源或數據,例如它會提供資源的類型,如果資源是圖片,那麼它會描述圖片的格式,如果資源是字符串或數據,它會提供編碼方式,這樣接收者收到資源後才能知道如何處理接收到的數據。實體包頭經常出現在回覆數據包中,但如果客戶端使用PUT或POST向服務器傳輸數據時,它也會包含在請求數據包裏。當客戶端使用HEAD請求時,服務器回覆的數據包中會包含大量實體包頭以便將資源的各種信息或屬性告訴客戶端。

我們看常用的幾種實體包頭。1.Allow 它列舉所有可用於給定資源的方法,例如GET,HEAD,PUT等,通常情況下服務器會返回405(Method Not Allowed)回覆包,當客戶端拿到這個數據包時,通過該包頭就可以知道通過什麼方法去獲取給定資源。2,Content-Encoding,該包頭告訴客戶端資源如何被編碼,如果客戶端請求的是字符串文件,那麼通常情況下會使用base-64編碼,該包頭就會包含對應信息。於是客戶端拿到數據後就知道用什麼方法進行解碼。3,Content-Language,它包含了所傳輸數據所使用的自然語言,這個包頭主要用於客戶端在展示資源時提供便利,例如來自德國的音頻文件就可以將標誌符"de"包含在包頭裏,這樣客戶端就知道音頻播放後是德國語言。

4,Content-Length, 該包頭用於標誌資源的長度,該包頭信息對客戶端非常重要,客戶端根據該包頭的信息才能知道何時才能接收完所有數據。但並不是所有數據都能有固定長度,例如直播的視頻數據就不會有固定長度,關於傳輸數據長度的計算在後續章節會詳細研究。5,Content-Location,該包頭標明瞭資源所在的位置,它通常包含資源對應的URL,當客戶端所要求的資源被存放在多個地方時,該包頭纔會出現在回覆數據包中。6,Content-Range,當返回的數據包只包含了客戶端所請求資源的某一部分時,該包頭必須包含在數據包裏。例如當客戶端向服務器請求一個大型文件時,文件數據不可能一下子全部包含在一個數據包裏,必須分成多個部分多次發送,該包頭顯示當前數據包發送的數據屬於全部數據的哪一部分,同時它還包含了數據的總大小。例如客戶端請求一個包含2000字節的文件,第一個數據包包含了前1200字節,那麼該包頭的形式爲”0-1199/2000"。

7,Content-Type,它用於表明資源的類型,例如資源是音頻還是視頻,該包頭需要在後續章節中詳細講解。8,Expires,該包頭包含了資源的過期時間,如果客戶端是代理服務器,那麼當它緩存的資源過了給定過期時長後,它必須再次向服務器請求資源,該包頭會包含"max-age"字段用於表明過期時間。9,Last-Modified,該包頭告訴客戶端服務器最近一次對資源進行修改的時間,如果客戶端上次已經從服務器下載了一個超大文件,那麼客戶端會使用HEAD請求獲得該包頭從而知道數據是否被修改過,通過該包頭得知數據上傳被修改的時間以便決定是否再次向服務器下載該數據。

下一節我們將看看如何用代碼來實現POST請求。

更詳細的講解和代碼調試演示過程,請點擊鏈接

更多技術信息,包括操作系統,編譯器,面試算法,機器學習,人工智能,請關照我的公衆號:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章