1. http基本介紹
http協議:是種超文字傳輸協議(請求/響應協議)。它是建立在tcp上無狀態單向鏈結協議(屬於tcp/ip協議族中一員)。它規定客戶端傳送什麼樣的資料給伺服器端(http請求),並且伺服器端需要返回什麼樣的資料(http響應);注意乙個完整的http請求/響應,並不只是通過http協議來實現的。而是由多個協議相互協作實現的;
http請求/響應
http握手和揮手
網路tcp/ip分層模型
http版本發展史
1. http請求和響應
http請求是由客戶端發起的動作,告訴伺服器需要什麼資料。這一過程稱之為http請求。伺服器接收到http請求後,作出相應的處理,返回http請求所需要的資料。這一過程稱之為響應;如圖所示:
不管是http請求/響應,它們的結構一般分為3層。請求行/響應行、請求頭/響應頭、請求主體/響應主體。這3層結構組成統稱為請求/響應報文;
http請求結構:
2. 請求頭:主要由若干屬性組成,包含使用者**、cookie等使用者資訊;
3. 請求主體:主要是給伺服器端傳送的資料。
http響應結構:
1. 響應行:http協議、協議版本、狀態碼和狀態描述組成;
2. 響應頭:主要由若干屬性組成,包含資料型別(content-type)、資料長度(content-length)等資訊;
2. http的握手和揮手
每個完整的http請求,客戶端都會發起3次握手和4次揮手動作。3次握手是發生在http連線建立階段;4次揮手發生在http連線斷開階段;如圖所示:
1. 3次握手:
第一次握手:客戶端在tcp中準備syn標誌位1,並初始化序號為x傳送給伺服器端;
第二次握手:伺服器端接收到客戶端的報文,就準備確認包(ack)應答。ack和syn標誌位都為1,同時初始化序號y,將客戶端的傳送序號置於x+1。響應給客戶端;
2. 4次揮手:
第一次揮手:客戶端傳送乙個fin,用來關閉服務端到server的資料傳送,客戶端進入fin_wait_1狀態。
第二次揮手:服務端 收到fin後,傳送乙個ack給client,確認序號為收到序號+1(與syn相同,乙個fin占用乙個序號),服務端進入close_wait狀態
第三次揮手:服務端傳送乙個fin,用來關閉server到client的資料傳送,服務端進入last_ack狀態。
第四次揮手:客服端收到fin後,服務端進入time_wait狀態,接著傳送乙個ack給服務端,確認序號為收到序號+1,server進入closed狀態,完成四次揮手。
總結過程:客戶端傳送http請求時,會經過3次握手階段確認連線的建立,連線建立成功後,就開始傳遞資料並獲取伺服器的響應。接收響應結束後,又會經過4次揮手階段,確認連線的斷開;好比我們需要去朋友那拿點東西,先打**過去確認朋友在不在家,如果朋友在家,我們再過去拿東西(這樣就可以避免朋友不在家,白跑一趟)。拿到東西後,就告訴朋友不需要再拿東西。朋友知道後就會做其他事情了。不用等著我們了;
通過該過程可知http請求對於伺服器端屬於被動的,它不能主動傳送任何資料給客戶端,它必須等待客戶端請求才能做出相應的反饋。同時http又是無狀態的,伺服器端不知道客戶端是不是第n次訪問。
3. 網路tcp/ip分層模型
網路模型中有osi七層模型和tcp/ip四層模型。由於osi模型過於複雜,在網路中只做理論參考,實際應用場景中,tcp/ip模型應用廣泛,已經成為網際網路的實施標準。所以這裡直接上tcp/ip模型;如下圖所示:
tcp/ip四層模型
對應網路協議
應用層
傳輸層
tcp, udp
網路層
ip, icmp, arp, rarp, akp, uucp
資料鏈路層
fddi, ethernet, arpanet, pdn, slip, ppp
ieee 802.1a, ieee 802.2到ieee 802.11
(來自:
傳輸層:為應用層提供端到端的通訊,保證了資料報的順序性和完整性的傳輸;
資料鏈路層:將物理層的資料位元流封裝成幀,控制幀在物理通道上的傳輸,包括糾錯,調節傳送速率等。另外還提供了兩個主機之間資料鏈路的建立,維持和釋放的管理工作;
4. http版本發展史
1. http 0.9版本:這一階段的http提供的功能及其有限。在這一版本只能使用get方式請求,然後請求完畢之後立即關閉連線。
2. http 1.0版本:該版本新增head和post請求方式,還支援多種不同的資料型別,不再侷限於文字;同時新增了狀態碼概念,用來標記報錯原因;但是該版本只能序列傳送請求,不能多個請求同時傳送,並且不支援keepalive;
3. http 1.1版本:這一版本利用管道技術實現多請求同時傳送(支援並行請求),同時還支援keepalive,減少了握手/揮手次數,提高了伺服器效能;該版本也是目前主流版本;
4. http 2.0版本:該版本支援真正意義上的並行請求,同時支援雙全工通訊。也就是伺服器端也可以主動傳送資料給客戶端。不再是被動傳送了。
5.補充說明
tcp_keepalive_time // 距離上次傳送資料多少時間未收到判斷為開始檢測
tcp_keepalive_intvl // 檢測開始每多少時間傳送心跳包
tcp_keepalive_probes // 傳送幾次心跳包對方未響應則close連線
當經過3次握手建立鏈結之後,如果客戶端關閉,伺服器未收到反饋,就會傳送空心跳包去檢查鏈結是否可用。如果不可用就關閉連線;
http keepalive是為了告訴伺服器http請求完之後不要關閉連線,因為在4次揮手之後伺服器會首先關閉連線。,以減少3次握手和4次揮手次數,提高http請求效率。
http知識總結
schema host port path url params query string anchor 結構 含義scheme 指定低層使用的協議 例如 http,https,ftp host http伺服器的ip位址或者網域名稱 port http伺服器的預設埠是80,這種情況下埠號可以省略。如...
HTTP協議知識總結
http協議指的是超文字傳輸協議,其建立在運輸層tcp協議的基礎上,利用網際網路來進行傳輸超文字的乙個應用層協議。http與https均屬於應用層協議,其中https協議經過了tls和ssl加密,他們的不同點是 1.https協議傳送的內容是經過加密後的內容,而http傳送的是明文 2.https使...
網路知識之http請求
它定義了客戶端和伺服器之間互動的資訊內容和步驟。客戶端解析url後傳送請求訊息 伺服器 解析請求訊息,完成工作,包裝結果為響應訊息 反饋響應訊息給瀏覽器 瀏覽器顯示資料 對什麼 uri,一條請求訊息只能寫乙個uri 進行怎樣的操作 方法,想讓web伺服器完成的工作 有時候會有資料 post方法時 表...