報文、前後端分離、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作為中間層,具體有哪些好處呢
適配性提升
響應速度提升
效能得到提升
- Express的中介軟體
Express是一種路由和中介軟體Web框架,它具有自己的最小功能:Express應用程式本質上是一系列中介軟體函式呼叫。
中介軟體函式是可以訪問請求物件 (req),響應物件(res)以及應用程式的請求 - 響應週期中的下一個中介軟體函式的函式。下一個中介軟體函式通常由名為的變量表示next。
中介軟體功能可以執行以下任務:
執行任何程式碼。
更改請求和響應物件。
結束請求 - 響應週期。
呼叫堆疊中的下一個中介軟體函式。
如果當前的中介軟體函式沒有結束請求 - 響應週期,則必須呼叫next()以將控制傳遞給下一個中介軟體函式。否則,請求將被掛起。
- 說說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,至此,完成四次揮手。