1.簡介html
HTTP協議(Hyper Text Transfer Protocol,超文本傳輸協議),是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。瀏覽器
HTTP基於TCP/IP通訊協議來傳遞數據。緩存
HTTP基於客戶端/服務端(C/S)架構模型,經過一個可靠的連接來交換信息,是一個無狀態的請求/響應協議。服務器
2.特色cookie
(1)HTTP是無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。session
(2)HTTP是媒體獨立的:只要客戶端和服務器知道如何處理的數據內容,任何類型的數據均可以經過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。架構
(3)HTTP是無狀態:無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。ide
HTTP請求報文網站
HTTP請求報文由3部分組成(請求行+請求頭+請求體):
google
請求行:
①是請求方法,GET和POST是最多見的HTTP方法,除此之外還包括DELETE、HEAD、OPTIONS、PUT、TRACE。
②爲請求對應的URL地址,它和報文頭的Host屬性組成完整的請求URL。
③是協議名稱及版本號。
請求頭:
④是HTTP的報文頭,報文頭包含若干個屬性,格式爲「屬性名:屬性值」,服務端據此獲取客戶端的信息。
與緩存相關的規則信息,均包含在header中
請求體:
⑤是報文體,它將一個頁面表單中的組件值經過param1=value1¶m2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求參數的數據。不但報文體能夠傳遞請求參數,請求URL也能夠經過相似於「/chapter15/user.html? param1=value1¶m2=value2」的方式傳遞請求參數。
HTTP請求報文頭屬性
Accept
請求報文可經過一個「Accept」報文頭屬性告訴服務端 客戶端接受什麼類型的響應。
以下報文頭至關於告訴服務端,俺客戶端可以接受的響應類型僅爲純文本數據啊,你丫別發其它什麼圖片啊,視頻啊過來,那樣我會歇菜的~~~
Accept:text/plain
Accept屬性的值能夠爲一個或多個MIME類型的值(描述消息內容類型的因特網標準, 消息能包含文本、圖像、音頻、視頻以及其餘應用程序專用的數據)
cookie
客戶端的Cookie就是經過這個報文頭屬性傳給服務端的哦!以下所示:
Cookie: $Version=1; Skin=new;jsessionid=5F4771183629C9834F8382E23
服務端是怎麼知道客戶端的多個請求是隸屬於一個Session呢?注意到後臺的那個jsessionid = 5F4771183629C9834F8382E23木有?原來就是經過HTTP請求報文頭的Cookie屬性的jsessionid的值關聯起來的!(固然也能夠經過重寫URL的方式將會話ID附帶在每一個URL的後面哦)。
Referer
表示這個請求是從哪一個URL過來的,假如你經過google搜索出一個商家的廣告頁面,你對這個廣告頁面感興趣,鼠標一點發送一個請求報文到商家的網站,這個請求報文的Referer報文頭屬性值就是http://www.google.com。
Cache-Control
對緩存進行控制,如一個請求但願響應返回的內容在客戶端要被緩存一年,或不但願被緩存就能夠經過這個報文頭達到目的。
HTTP的響應報文也由三部分組成(響應行+響應頭+響應體)
①報文協議及版本;
②狀態碼及狀態描述;
響應頭:
③響應報文頭,也是由多個屬性組成;
響應體:
④響應報文體,即咱們真正要的「乾貨」
和請求報文相比,響應報文多了一個「響應狀態碼」,它以「清晰明確」的語言告訴客戶端本次請求的處理結果。
HTTP的響應狀態碼由5段組成: