簡單的HTTP協定
http協定是一種不儲存狀态的協定,即無狀态協定。
http協定不會儲存之前發送過的請求或響應功能,比如使用者的登入資訊等。(不儲存互動資訊)
是以每當有新的請求發送,就會有新的響應産生。
目的:
為了更快地處理大量的事務,確定協定的可伸縮性。
(如果http協定不是無狀态協定的話,就需要儲存大量的互動資訊(會增大cpu的開銷和記憶體資源的消耗),而許多資訊不是我們想要儲存的。)
HTTP協定是用于用戶端和伺服器端之間的通信,HTTP協定是處于TCP/IP分層的應用層,http協定能夠明确區分哪端是用戶端,哪端是伺服器端。
用戶端:請求通路資源的一端。 伺服器端:提供資源響應的一端。
HTTP協定通信:
HTTP協定規定:請求從用戶端發出,最後伺服器端響應,該請求傳回。(即隻能是用戶端先發送請求,伺服器端才會響應)
請求封包的組成:
(1)請求方法(get,post,put等)
GET方法:擷取資源(側重用請求資料)
POST方法:傳輸實體主體(側重于送出資料)
PUT方法:傳輸檔案(由于HTTP/1.1不帶驗證機制,任何人都能上傳檔案,不提倡使用)
DELETE:删除檔案(跟PUT方法一樣,不提倡使用)
HEAD:獲得封包首部(用于确認URI的有效性及資源更新的日期時間)
OPTIONS:詢問支援的方法(詢問伺服器支援的方法)
TRACE:追蹤路徑(用來确認連接配接過程中的一系列操作,通常不會用到)
CONNECT:要求用隧道協定連接配接代理(要求在與代理伺服器通信時建立隧道,
主要使用SSL(安全套接層)和TLS(傳輸層安全)協定把通信内容加密後經網絡隧道傳輸)
(2)請求URI
如果不是通路特定資源而是對伺服器本身發起的請求,可以用星号 * 來代替請求URI(隻是單純地想通路伺服器)
(3)協定版本
(4)請求首部字段(可選)
(5)内容實體
響應封包的組成:
(1)協定版本
(2)狀态碼(200等)
(3)用以解釋狀态碼的原因短語
(4)響應部首字段(可選)
(5)實體主體
HTTP的持久連接配接:
原因:HTTP協定的初始版本中,每進行一次HTTP通信就要斷開一次TCP連接配接。
(在請求一個包含多張圖檔的HTML頁面時,就需要多次請求,每次請求時無謂的TCP連接配接建立和斷開,都會增加通信量的開銷)
是以持久連接配接的特點是隻要任意一端沒有明确提出斷開連接配接,則保持TCP的連接配接狀态。
持久連接配接旨在建立一次TCP連接配接後進行多次的請求和響應的互動。
好處:減少通信量的開銷;減輕了伺服器端的負載,讓Web顯示速度更快。
(減少了連接配接時的三次握手和斷開時的三次握手的開銷)
管線化:
即不用等待響應,直接發送下一個請求。(持久連接配接使管線化成為可能)
浏覽器在預設狀态下并不激活http管線化功能。
Cookie的狀态管理:
前面提到過HTTP是一種無狀态協定,是以不能儲存使用者登入等資訊。
而Cookie技術通過在請求和響應封包中寫入Cookie資訊來控制用戶端的狀态。
Cookie會根據從伺服器端發送的響應封包内的一個叫做Set-Cookie的首部字段資訊,通知用戶端儲存Cookie。
當下次用戶端再往該伺服器發送請求時,用戶端會自動在請求封包中加入Cookie值後發送出去。
伺服器端發現用戶端發送過來的Cookie後,會去檢查究竟是從哪一個用戶端發來的連接配接請求,然後對比伺服器上的記錄,最後得到之前的狀态資訊