1. 程式人生 > >Http的請求欄位和響應欄位

Http的請求欄位和響應欄位

  • 用於HTTP請求中的常用請求頭欄位
    Accept:用於高速伺服器,客戶機支援的資料型別
    Accept-Charset:用於告訴伺服器,客戶機採用的編碼格式
    Accept-Encoding:用於告訴伺服器,客戶機支援的資料壓縮格式
    Accept-Language:客戶機的語言環境
    Host:客戶機通過這個頭高速伺服器,想訪問的主機名
    If-Modified-Since:客戶機通過這個頭告訴伺服器,資源的快取時間
    Referer:客戶機通過這個頭告訴伺服器,它是從哪個資源來訪問伺服器的(防盜鏈)
    User-Agent:客戶機通過這個頭告訴伺服器,客戶機的軟體環境
    Cookie:客戶機通過這個頭可以向伺服器帶資料
    Connection:處理完這次請求後是否斷開連線還是繼續保持連線
    Date:當前時間值

  • HTTP響應
    狀態行:用於描述伺服器對請求的處理結果。
    狀態碼:100~199:表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程。
    200~299:表示成功接收請求並已完成整個處理過程。常用200
    300~399:為完成請求,客戶需進一步細化請求。例如:請求的資源已經移動一個新地址、常用302(意味著你請求我,我讓你去找別人),307和304(我不給你這個資源,自己拿快取)
    400~499:客戶端的請求有錯誤,常用404(意味著你請求的資源在web伺服器中沒有)403(伺服器拒絕訪問,許可權不夠)
    500~599:伺服器端出現錯誤,常用500
    多個響應頭:響應頭用於描述伺服器的基本資訊,以及資料的描述,伺服器通過這些資料的描述資訊,可以通知客戶端如何處理等一會兒它回送的資料。
    Location:這個頭配合302狀態碼使用,用於告訴客戶找誰。
    Server:伺服器通過這個頭告訴瀏覽器伺服器的型別。
    Content-Encoding:伺服器通過這個頭告訴瀏覽器資料的壓縮格式。
    Content-Length:伺服器通過這個頭告訴瀏覽器回送資料的長度
    Content-Type:伺服器通過這個頭告訴瀏覽器回送資料的型別
    Last-Modified:告訴瀏覽器當前資源的最後快取時間
    Refresh:告訴瀏覽器隔多久重新整理一次
    Content-Disposition:告訴瀏覽器以下載方式開啟資料
    Transfer-Encoding:告訴瀏覽器資料的傳送格式
    ETag:快取相關的頭

  • ········三種禁止瀏覽器快取的頭欄位:
    Expires:告訴瀏覽器把回送的資源快取多長時間 -1或0則是不快取
    Cache-Control:no-cache
    Pragma:no-cache
    伺服器通過以上兩個頭,也就是控制瀏覽器不要快取資料
    實體內容:代表伺服器向客戶端回送的資料

  • http狀態碼及表示的狀態資訊
    200(正常)
    表示一切正常,返回的是正常請求結果。
    302/307(臨時重定向)
    指出被請求的文件已被臨時移動到別處,此文件的新的URL在Location響應頭中給出。
    304(未修改)
    表示客戶機快取的版本是最新的,客戶機應該繼續使用它。
    403(禁止)
    伺服器理解客戶端請求,但拒絕處理它。通常由於伺服器上檔案或目錄的許可權設定所致。
    404(找不到)
    伺服器上不存在客戶機所請求的資源。
    500(內部伺服器錯誤)
    伺服器端的CGI、ASP、JSP等程式發生錯誤。

  • 怎麼實現http的斷點續傳
    要實現斷點續傳的功能,通常都需要客戶端記錄下當前的下載進度,並在需要續傳的時候通知服務端本次需要下載的內容片段。
    HTTP1.1協議(RFC2616)中定義了斷點續傳相關的HTTP頭 RangeContent-Range欄位,一個最簡單的斷點續傳實現大概如下:

    1.客戶端下載一個1024K的檔案,已經下載了其中256K
    2.網路中斷,客戶端請求續傳,因此需要在HTTP頭中申明本次需要續傳的片段:
    Range:bytes=256000-
    這個頭通知服務端從檔案的256K位置開始傳輸檔案
    3.服務端收到斷點續傳請求,從檔案的256K位置開始傳輸,並且在HTTP頭中增加:
    Content-Range:bytes 256000-/1024000
    並且此時服務端返回的HTTP狀態碼應該是206,而不是200。

終端在發起續傳請求時應該在HTTP頭中申明If-Match 或者If-Modified-Since 欄位,幫助服務端判別檔案變化。

另外RFC2616中同時定義有一個If-Range頭,終端如果在續傳是使用If-Range。If-Range中的內容可以為最初收到的ETag頭或者是Last-Modfied中的最後修改時候。服務端在收到續傳請求時,通過If-Range中的內容進行校驗,校驗一致時返回206的續傳回應,不一致時服務端則返回200迴應,迴應的內容為新的檔案的全部資料。