#http協議 什麼是http協議?客戶端連上web服務器後,若是想獲取web服務器中的某個web資源,就須要遵照必定的通信格式,http協議就是用於定義客戶端與服務器之間的通信格式。html
- http是hypertext transfer protocol(超文本傳輸協議)的簡寫,它是TCP/IP協議的一個應用層協議,用於定義web瀏覽器與web服務器之間交換數據的過程。
- 深刻學習http協議是學好web開發的一個重要前提!
- http協議的版本:http/1.0、http/1.1
(使用telnet演示,ctrl+],讓回顯正常顯示)web
###http1.0與http1.1apache
在http1.0協議中,客戶端與服務器創建鏈接後,只能獲取一個web資源。 http1.1協議,容許客戶端與web服務器創建鏈接後,在一個鏈接上獲取多個資源。(使用telnet演示) 若是頁面上有對別的web資源的引用,那麼客戶端會屢次請求服務器,例如,有三張圖片,那麼就會一共請求四次(CSS精靈,優化程序)。瀏覽器
#http請求 客戶端連上服務器以後,向服務器請求某個web資源,稱之爲客戶端向服務器發送了一個http請求。一個完整的http請求包括:緩存
GET /aaa/1.html HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: en-us,zh-cn;q=0.8,zh;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Connection: keep-alive If-Modified-Since: Fri, 13 Jun 2014 23:27:47 GMT If-None-Match: W/"268-1402702067708" Cache-Control: max-age=0tomcat
請求行:用於描述客戶端的請求方式、請求資源的名稱,以及使用HTTP協議版本號 消息頭:用於描述客戶端請求哪臺主機,以及客戶端的一些環境信息等 實體內容:在此次請求中所攜帶的數據(消息頭與實體內容中有一個空行)安全
###請求行 請求行中的GET稱爲請求方式,請求方式有:服務器
POST和GET,都用於向服務器請求某個資源,這兩種方式的區別主要表如今數據傳遞上:app
###消息頭 經常使用的消息頭:jsp
#http響應 一個http響應表明服務器向客戶端返回的數據,它包括:
HTTP/1.1 200 OK (304 Not Modified)
Server : Apache-Coyote/1.1 Etag : W/"268-1402702066000" Date : Sat, 14 Jun 2014 03:45:49 GMT Accept-Ranges : bytes Content-Length : 268 Content-Type : text/html Date : Sat, 14 Jun 2014 03:47:34 GMT Etag : W/"268-1402702066000" Last-Modified : Fri, 13 Jun 2014 23:27:46 GMT Server : Apache-Coyote/1.1
###狀態行 格式:HTTP版本號 狀態碼 緣由敘述<CRLF> 舉例:HTTP/1.1 200 OK 狀態碼用於表示服務器對請求的處理結果,它是一個三位的十進制數。響應狀態碼分爲5類:
100~199 表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程(不多見) 200~299 表示成功接收請求並已完成整個處理過程,經常使用200 300~399 爲完成請求,客戶須要進一步細化請求。例如:請求的資源已經移動一個新地址,經常使用302(讓請求去找別的資源)、307和304(讓客戶端去拿緩存) 400~499 客戶端請求有錯誤,經常使用 404 500~599 服務器端出現錯誤,經常使用500
###響應頭 http響應經常使用響應頭:
在實際開發中,咱們是不須要編寫這些複雜的頭信息的,由於在JavaEE中已經封裝了不少針對不一樣請求和響應的處理對象,直接調用相對應的API就能夠了,可是隻要清楚了響應頭,咱們也能夠本身去編寫一些響應程序,並且對於響應對象的理解也更加容易。
###Range頭(斷點續傳)(demo)
Range頭指示服務器只傳輸一部分web資源。這個頭能夠用來實現斷點續傳功能。Renge字段能夠經過三種格式設置傳輸的字節範圍:
Range : bytes=1000-200 (傳輸範圍從1000到2000字節) Range : bytes=1000- (從1000個字節之後的全部內容) Range : bytes=1000 (傳輸最後1000個字節)
Accept-Ranges: 表示知否支持Renge,若是支持,返回:Accept-Ranges: bytes,若是不支持,返回:Accept-Ranges: none Content-Range : 返回的Web資源的字節範圍,如:Content-Range : 1000-3000/5000(表示本次返回資源的1000到3000字節的數據,總共5000字節)