HTTP實體和編碼——《HTTP權威指南》系列

WilsonLiu's blog 首發地址html

實體和編碼

天天都有數以億計的各類媒體對象經由HTTP傳送,如圖像,文本,影片以及軟件程序等。HTTP會確保它的報文被正確的傳送,識別,提早以及適當的處理,則須要知足如下條件。算法

  1. 能夠被正確的識別(經過Content-Type首部說明媒體格式,Content-Language首部說明語言),以便瀏覽器和其餘客戶端可以正確的處理內容瀏覽器

  2. 能夠被正確的解包(經過Content-Length首部和Content-Encoding首部)緩存

  3. 是最新的(經過實體驗證碼和緩存過時控制)服務器

  4. 符合用戶的須要(基於Accept系列的內容協商首部)網絡

  5. 在網絡上能夠快速有效地傳輸(經過範圍請求,差別編碼以及其餘數據壓縮方法)性能

  6. 完整到達,未被篡改過(經過傳輸編碼首部和Content-MD5校驗和首部)優化

爲了實現上述目標,HTTP/1.1版本定義瞭如下10個基本實體首部字段。ui

  • Content-Type編碼

  • Content-Length

  • Content-Language

  • Content-Encoding

  • Content-Location

  • Content-Range

  • Content-MD5

  • Last-Modified

  • Expires

  • Allow

  • Etag

  • Cache-Control

Content-Length:實體的大小

Content-Length首部指示出報文中編碼後實體主體的字節大小。使用Content-Length首部是爲了可以檢測出服務器崩潰而致使的報文截尾,並對共享持久鏈接的多個報文進行正確的分段。

Content-Length首部對於持久鏈接是必不可少的,若是響應經過持久鏈接傳輸,就可能有另外一條HTTP響應緊隨其後。客戶端經過Content-Length首部就能夠知道報文在何處結束,下一條報文從何處開始。由於鏈接是持久的,客戶端沒法依賴鏈接關閉來判別報文的結束。

在使用分塊編碼(chunked encoding)時,能夠沒有Content-Length,此時,數據是分爲一系列的塊來發送的,每塊都有大小說明。

HTTP/1.1規範中建議對於帶有主體但沒有Content-Length首部的請求,服務器若是沒法肯定報文的長度,就應當發送400 Bad Request響應或411 Length Required響應,後一種代表服務器要求收到正確的Content-Length首部。

實體摘要

爲檢測實體主體的數據是否被修改過,發送方能夠在生成初始的主體時,生成一個數據的校驗和。Content-MD5首部是在對內容做了全部須要的內容編碼以後,還沒作任何傳輸編碼以前,計算出來的。

媒體類型和字符集

Content-Type首部字段說明了實體主體的MIME類型,同時還支持可選的參數來進一步說明內容的類型。
Content-Type: text/html; charset=iso-8859-4

多部分媒體類型
MIME中的multipart電子郵件報文中包含多個報文,它們合在一塊兒做爲單一的複雜報文發送。每一部分都是獨立的,有各自的描述其內容的集,不一樣的部分之間用分界字符串鏈接在一塊兒。
HTTP也支持多部分主體。不過,一般只用在下列兩種情形之一:提交填寫好的表格,或是做爲承載若干文檔片斷的範圍響應。
HTTP使用Content-Type:multipart/form-data或Content-Type:multipart/mixed這樣的首部以及多部分主體來發送這種請求。

內容編碼 Content-Encoding

HTTP應用程序有時在發送以前須要對內容進行編碼,當內容通過編碼以後,編好碼的數據就防止實體主體中,像往常同樣發送給接收方。此時Content-Length變爲編碼後的長度。
同時,咱們不但願服務器用客戶端沒法解碼的方式來對內容進行編碼,所以,客戶端須要把本身可以支持的內容編碼列表防止請求的Accept-Encoding首部。

傳輸編碼和分塊編碼 Transfer-Encoding

使用傳輸編碼是爲了改變報文中的數據在網絡上傳輸的方式。

分塊編碼
分塊編碼是HTTP規範惟必定義的傳輸編碼方式。
分塊編碼把報文分割爲若干個大小已知的塊。塊之間是緊挨着發送的,這樣就不須要在發送以前就知道整個報文的大小了。

範圍請求 Range

範圍請求是指客戶端實際上只請求文檔的一部分,或者說某個範圍。好比,下載電影下到一半網絡故障,鏈接中斷了,此時可利用範圍請求來繼續下載。
Range: bytes=4000-
表明客戶端請求的是文檔開頭4000字節之後的步伐內容。

Range首部在流行的點對點(Peer-to-Peer)文件共享客戶端軟件中獲得普遍的應用,他們從不一樣的對等實體同時下載多媒體文件的不一樣部分。

差別編碼

差別編碼是HTTP協議的一個擴展,它經過交換對象改變的部分而不是完整的對象來優化傳輸性能。

請求報文

A-IM: diffe   //Accept-Instance-Manipulation
If-None-Match: ababdisdksada //驗證是否新鮮

響應報文

IM:diffe //差別編碼的算法
Etag: zdsdsfsafsd  //更新後的版本號
Delta-base: ababdisdksada //差別算法基於的Etag
相關文章
相關標籤/搜索