1. 程式人生 > >報文、前後端分離、express中介軟體、TCP協議

報文、前後端分離、express中介軟體、TCP協議

1.報文

報文,是網路中交換和傳輸的資料單元,即站點一次性要傳送的資料塊。報文包含了將要傳送的完整的資料資訊,其長短很不一致,長度不限且可變。報文也是網路傳輸的單位,傳輸過程中會不斷的封裝成分組、包、幀來傳輸,封裝的方式就是新增一些資訊段,那些就是報文頭以一定格式組織起來的資料。

HTTP報文是由一行一行簡單的字串組成的。HTTP報文都是純文字,不是二進位制程式碼,所以人們可以很方便地對其進行讀寫。如果說HTTP是因特網的信使,那麼HTTP報文就是它用來搬東西的包裹了。

報文由三部分組成:對報文進行描述的起始行,包含屬性的首部塊,以及可選的、包含資料的主題部分。

http報文是簡單的格式化文字。所有的HTTP報文都可以分為兩類:請求報文和響應報文

2.前後端分離

未分離時期:

 

 

半分離時期:

前後端半分離,前端負責開發頁面,通過介面(Ajax)獲取資料,採用dom操作對頁面進行資料繫結,最終是由前端把頁面渲染出來。這也就是其他部落格裡說的,Ajax與SPA應用(單頁應用)結合的方式。其結構圖如下

 

 

分離時期:

 

前後端分離:

        前端:整個頁面顯示以及頁面的互動邏輯。用ajax和node作為互動。其中node作為中間層。

        後端:提供api介面,利用redis儲存session,與資料庫互動。

 

流程:

        客戶端(瀏覽器)向node請求頁面互動。

        node向後端(這裡用java)轉發請求。java在傳送請求到資料庫。

        java返回結果給node。node返回頁面,提供資料。

前後端分離前端:

前端可以不依賴後端,前端自己起一個服務,如果前端頁面處理好,後端的API還沒有提供,那麼,前端可以用mock模擬資料。

這裡出現一個問題,如果沒有服務,單頁面是不可以ajax請求資料,會出現跨域的問題。要麼瀏覽器做跨域。所以這裡用到node。

我們利用node的express開啟一個本地伺服器

node:

        node主要是為了分層開發,前端不需要知道後端是怎麼提供資料,怎麼操作。後端也不需要知道node是怎麼操作,前端是怎麼部署。前端可以利用node自己作處理。

        node本身有著非同步,非阻塞I/o。在處理併發量比較大的資料請求上有很大的優勢。

增加node.js作為中間層,具體有哪些好處呢

適配性提升

響應速度提升

效能得到提升

  1. Express的中介軟體

Express是一種路由和中介軟體Web框架,它具有自己的最小功能:Express應用程式本質上是一系列中介軟體函式呼叫。

中介軟體函式是可以訪問請求物件 (req),響應物件(res)以及應用程式的請求 - 響應週期中的下一個中介軟體函式的函式。下一個中介軟體函式通常由名為的變量表示next。

中介軟體功能可以執行以下任務:

執行任何程式碼。

更改請求和響應物件。

結束請求 - 響應週期。

呼叫堆疊中的下一個中介軟體函式。

如果當前的中介軟體函式沒有結束請求 - 響應週期,則必須呼叫next()以將控制傳遞給下一個中介軟體函式。否則,請求將被掛起。

  1. 說說TCP傳輸的三次握手四次揮手策略

為了準確無誤的把資料送達目標處,TCP協議採用了三次握手策略。用TCP協議把資料包送出去後,TCP不會對傳輸後的情況置之不理,它一定會向對方確認是否送達,握手過程中使用了TCP的標誌:SYN和ACK.

傳送方首先發送一個帶SYN標誌的資料包給對方。接收端收到後,回傳一個帶有SYN/ACK標誌的資料包以示傳達確認資訊。

最後,傳送端再回傳一個帶有ACK標誌的資料包,以示握手結束。

若在握手過程中,某個階段莫名中斷,TCP協議會再次以相同的順序傳送相同的資料包。

單開一個TCP連線則需要“四次揮手”。

第一次揮手:主動關閉方傳送一個FIN,用來關閉主動方到被動主動方的資料傳送,也就是主動關閉方告訴被動關閉方:我已經不會在給你傳送資料了(當然,在FIN包之前傳送出去的資料,如果沒有收到對應的ACK確認報文,主動關閉方依然會重發這些資料。)

第二次揮手:被動關閉方收到FIN包後,傳送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號)。

第三次揮手:被動關閉方傳送一個FIN,用來關閉被動關閉方到主動關閉方的資料傳送,也就是告訴主動關閉方,我的資料也傳送完了,不會再給你發資料。

第四次揮手:主動關閉方收到FIN後,傳送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。