首先作為傳送端的客戶端在應用層(http 協議)發出乙個想看某個 web 頁面的 http 請求。
接著,為了傳輸方便,在傳輸層(tcp 協議)把從應用層處收到的資料(http 請求報文)進行分割,並在各個報文上打上標記序號及埠號後**給網路層。
在網路層(ip 協議),增加作為通訊目的地的 mac 位址後**給鏈路層。這樣一來,發往網路的通訊請求就準備齊全了。
接收端的伺服器在鏈路層接收到資料,按序往上層傳送,一直到應用層。當傳輸到應用層,才能算真正接收到由客戶端傳送過來的 http請求。
在http工作開始之前,客戶端首先要通過網路與伺服器建立連線,該連線是通過 tcp 來完成的,該協議與 ip 協議共同構建 internet,即著名的 tcp/ip 協議族,因此 internet 又被稱作是 tcp/ip 網路。http 是比 tcp 更高層次的應用層協議,根據規則,只有低層協議建立之後,才能進行高層協議的連線,因此,首先要建立 tcp 連線,一般 tcp 連線的埠號是80;
一旦建立了tcp連線,客戶端就會向伺服器傳送請求命令;
例如:get/sample/hello.jsp http/1.1
客戶端傳送其請求命令之後,還要以頭資訊的形式向伺服器傳送一些別的資訊,之後客戶端傳送了一空白行來通知伺服器,它已經結束了該頭資訊的傳送;
客戶端向伺服器發出請求後,伺服器會客戶端返回響應;
例如: http/1.1 200 ok
響應的第一部分是協議的版本號和響應狀態碼
正如客戶端會隨同請求傳送關於自身的資訊一樣,伺服器也會隨同響應向使用者傳送關於它自己的資料及被請求的文件;
伺服器向客戶端傳送頭資訊後,它會傳送乙個空白行來表示頭資訊的傳送到此為結束,接著,它就以 content-type 響應頭資訊所描述的格式傳送使用者所請求的實際資料;
一般情況下,一旦伺服器向客戶端返回了請求資料,它就要關閉 tcp 連線,然後如果客戶端或者伺服器在其頭資訊加入了這行** connection:keep-alive ,tcp 連線在傳送後將仍然保持開啟狀態,於是,客戶端可以繼續通過相同的連線傳送請求。保持連線節省了為每個請求建立新連線所需的時間,還節約了網路頻寬。
用於 http 協議互動的資訊被稱為 http 報文。請求端(客戶端)的 http 報文叫做請求報文;響應端(伺服器端)的叫做響應報文。http 報文本身是由多行(用 cr+lf 作換行符)資料構成的字串文字。
http 報文大致可分為報文首部和報文主體兩部分。兩者由最初出現的空行(cr+lf)來劃分。通常,並不一定有報文主體。
請求報文的首部內容由以下資料組成:
請求行 —— 包含用於請求的方法、請求 uri 和 http 版本。
首部字段 —— 包含表示請求的各種條件和屬性的各類首部。(通用首部、請求首部、實體首部以及rfc裡未定義的首部如 cookie 等)
狀態行 —— 包含表明響應結果的狀態碼、原因短語和 http 版本。
首部字段 —— 包含表示請求的各種條件和屬性的各類首部。(通用首部、響應首部、實體首部以及rfc裡未定義的首部如 cookie 等)
socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp/ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。
主機 a 的應用程式要能和主機 b 的應用程式通訊,必須通過 socket 建立連線,而建立 socket 連線必須需要底層tcp/ip 協議來建立 tcp 連線。建立 tcp 連線需要底層 ip 協議來定址網路中的主機。我們知道網路層使用的 ip 協議可以幫助我們根據 ip 位址來找到目標主機,但是一台主機上可能執行著多個應用程式,如何才能與指定的應用程式通訊就要通過 tcp 或 upd 的位址也就是埠號來指定。這樣就可以通過乙個 socket 例項唯一代表乙個主機上的乙個應用程式的通訊鏈路了。
連線->傳輸資料->關閉連線
http是無狀態的,瀏覽器和伺服器每進行一次http操作,就建立一次連線,但任務結束就中斷連線。
也可以這樣說:短連線是指socket連線後傳送後接收完資料後馬上斷開連線。
連線->傳輸資料->保持連線 -> 傳輸資料-> 。。。 ->關閉連線。
長連線指建立socket連線後不管是否使用都保持連線,但安全性較差。
長連線多用於操作頻繁,點對點的通訊,而且連線數不能太多情況,。每個tcp連線都需要三步握手,這需要時間,如果每個操作都是先連線,再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,次處理時直接傳送資料報就ok了,不用建立tcp連線。例如:資料庫的連線用長連線, 如果用短連線頻繁的通訊會造成socket錯誤,而且頻繁的socket 建立也是對資源的浪費。
而像web**的http服務一般都用短鏈結,因為長連線對於服務端來說會耗費一定的資源,而像web**這麼頻繁的成千上萬甚至上億客戶端的連線用短連線會更省一些資源,如果用長連線,而且同時有成千上萬的使用者,如果每個使用者都占用乙個連線的話,那可想而知吧。所以併發量大,但每個使用者無需頻繁操作情況下需用短連好。
總之,長連線和短連線的選擇要視情況而定。
HTTP網路請求原理
http是一種應用層協議,它通過tcp實現了可靠的資料傳輸,能夠保證資料的完整性 正確性,而tcp對於資料傳輸控制的優點也能夠體現在http上,使得http的資料傳輸吞吐量 效率得到保證。對於移動開發來說,網路應用基本上都是c s架構,也就是客戶端 伺服器架構。客戶端通過向伺服器發起特定的請求,伺服...
http請求判斷網路狀態
http 請求返回碼 200 表明網路連線正常 char http 60 www.baidu.com 訪問網頁 socket sock socket af inet,sock stream,0 建立socket if sock invalid socket sockaddr in hostadd h...
HTTP網路請求狀態碼
一些常見http狀態碼為 200 伺服器成功返回網頁 404 請求的網頁不存在 503 服務不可用 常見http狀態碼大全 1xx 臨時響應 表示臨時響應並需要請求者繼續執行操作的狀態 說明 http狀態碼 100 繼續 請求者應當繼續提出請求。伺服器返回此 表示已收到請求的第一部分,正在等待其餘部...