請求http頁面的相關過程

來源:互聯網
上載者:User

標籤:解析   串連狀態   images   user   .so   版本號碼   標識   客戶   wait   

     http請求從TCP建立三向交握後進行,用戶端按照規定的格式向伺服器發送http請求,伺服器在接收到這個請求之後,首先要對其進行解析,發掘出用戶端所需要的相關資源,然後經過相應的商務邏輯處理,找到這個相應的資源,並將它以特定的形式返回給用戶端。注意:不論是請求還是響應他都按照http協議的相關格式來進行,那都是比較通用的。

http的請求格式

  http的請求格式主要包括這幾部分:請求行、要求標頭、空行、訊息體。具體結構如所示:

請求行:是指請求中的第一行,它主要有3部分構成:GET、POST等方法名,請求資源的URI,所用http的版本號碼。

 要求標頭中的資訊:有和緩衝相關的資訊和用戶端身份(user-Agent)的資訊。

 

訊息體:是指用戶端向伺服器請求的資料資源,這部分資料不是每個請求所必有得。

http的響應格式

 http的請求格式主要包括這幾部分:響應行、回應標頭、空行、訊息體。具體結構如所示:

響應行:它主要包含三部分內容:所使用的http版本號碼、狀態代碼及狀態說明。

回應標頭:回應標頭是伺服器傳遞給用戶端用於說明伺服器的一些資訊,以及將來繼續訪問該資源時的策略。

訊息體:是指伺服器向用戶端回應的html檔案,或者是其他形式的內容,如視頻檔案、圖片等。

Socket

http頁面請求的這一部分內容與Socket編程緊密相關,又稱之為網路編程,網路通訊協定通過一個叫做socket的對象抽象出來,socket可以建立網路連接,讀資料,寫資料。socket模組定義了一些常量參數,用來指定socket的的地址族、socket的類型、以及支援的TCP/IP協議。

socket.socket([family[, type[, proto]]]):根據指定的地址族和通訊端類型、協議編號(預設為0)來建立通訊端對象。AF_INET對應的IPV4, AF_INET6對應的IPV6。現在最常用的是IPV4協議。具體的參數分配如:

伺服器端的編程(ser):           

Socket   :制定期望的通訊協議類型。AF_INET :IPV4,現在使用最多的。SOCK_STREAM :流式通訊端。

Bind() ip: port:給套介面分配一個本地協議地址,對於TCP,調用函數bind可以制定一個連接埠號碼,用於標識某個電腦上的某個進程,它還可以指定一個IP地址

Listen:僅被TCP伺服器調用,它是一個將調用connect發起串連的客戶套介面,它指示核心指向此套介面的串連請求。該函數在accpect之前被調用。對於監聽套介面,核心必須維護連個隊列:未完成串連隊列和已完成串連隊列的狀態。

Accept:從已完成串連隊列頭返回下一個已完成的串連,如果已完成的串連隊列為空白,則進入睡眠狀態。如果accept執行成功,則代表與客戶串連成功

Recv/read:接收用戶端發來的資訊。

Send/write:給用戶端返回一個ok;

Close:關閉串連。

  

用戶端cli:

Socket:制定期望的通訊協議類型。AF_INET :IPV4,現在使用最多的。SOCK_STREAM :流式通訊端。

Connect:建立一個與伺服器的連結。用戶端在調用connect之前不必再調用bind,如果是tcp套介面的話,函數connect激發TCP的三向交握過程,且僅在串連建立成或錯誤時返回

Send:給用戶端發送資訊。只能說明成功地將資料寫入發送緩衝區內,至於是否到達還不一定。

Recv:接收用戶端發過來的ok.

Close:執行si‘ci‘hui‘shou

Getsockname和getpeername返回與套介面有關的本地協議地址。Getsockname可用來擷取某套介面的地址族。在不調用bind的客戶機上,connect成功返回後,Getsocknam返回核心分配給此串連的本地連接埠號碼和IP地址。

三向交握

     最初始客戶機和伺服器的Tcp進程他們都處於CLOSED狀態,首先是B的TCP伺服器處理序先建立了傳輸控制塊TCB,準備接受用戶端的串連請求,然後B伺服器處理序端就處於LISTEN狀態,等待用戶端的串連請求。然後A的TCP客戶進程也是首先建立了一個傳輸控制模組,然後向B發出串連請求報文段,報文段的首部同步位SYN=1,同時給自己設定一個初始量S,此時客戶進程進入一個SEND狀態即就是同步已發送狀態。接著,B接收到A發出的串連請求以後, 同意串連建立,則需要向A發送一個確認。即把SYN和ACK都置為1,確認號為ack=S+1,同時還應發送一個自己的初始值假定為n,此時B進入同步收到狀態。最後客戶機A收到B的確認後,還應向B發出確認,將ACK置為1,另外將ack置為n+1,然後A將進入ESTABLISHED已建立串連狀態。在B收到A的確認後,也進入ESTABLISHED狀態。如所示:

 

四次揮手

 

        A進程先向TCP發出一個串連釋放報文段,並停止再發送資料,主動關閉TCP串連,需要將終止控制位FIN置為1,並設定它的初始值U,這時A進入終止等待1狀態,等待B的確認。B收到連結釋放報文段後立即發出確認,確認號ack=U+1,例外設定一個自己的初始值v,然後B就進入CLOSE-WAIT狀態。當tcp通知高層應用程式後,然後A和B之間的串連就釋放了,但是此時TCp處於半關閉狀態,即A到B之間的串連釋放了,但是B還可以向A發送資料,A收到B的確認後就進入終止等待2狀態,等待B發出的串連釋放報文段。假設B發出串連釋放報文段,則要將終止控制位FIN置為1,同時發出確認號ack=u+1,還要再設定一個自己的初始值為W,然後B就進入了最後確認狀態LAST-ACK,等待A的確認;A收到B的連結釋放報文段後,向B發出確認,將ACK置為1,確認號置為W+1,然後A就進入TIME-WAIT時間等待狀態。,當A等待上2MSL最長報文段壽命後,即4S進入CLOSED狀態,才能開始下一個新串連的建立。

 

 

請求http頁面的相關過程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.