網路在前端開發中的重要性是不言而喻的(感覺說了句廢話,網路在哪塊兒開發中不重要啊^-^,原諒我吧,真的不知道怎麼開篇了),最近剛好學到這塊,就把了解到的知識點總結一下吧.
整篇文章還是從一道經典的面試題』從輸入位址到返回請求,發生了什麼』切入,其中涉及到相關知識點又再展開.(ps:作為乙個前端萌新,整個梳理的過程及涉及的知識點較為淺薄,如果其中有哪些不正確的見解,也希望大家指正哈)
so,進入正題啦…
畫了一張簡圖(真的很簡…).結合這張圖可以看到,當我們輸入網域名稱後,先是通過dns,即網域名稱系統來解析這個網域名稱,獲取對應的ip位址.然後將請求通過http協議打包,然後通過邏輯網路和物理網路傳輸,到達伺服器後再相應的拆包,然後後台處理.而後台返回資料,則是原路返回.
單是上面一段話,其中就涉及到很多概念了.現在一一展開下.
dnsdns,即domian name system,網域名稱系統.
應用程式呼叫解析程式,並成為dns的乙個客戶,把需要解析的網域名稱放在dns請求報文中,以udp資料報的方式發給本地網域名稱伺服器,待查到後,再將ip位址放在回答報文中返回.
查詢方式有2種:
為了提高dns查詢效率,減少網路dns查詢報文數及網域名稱伺服器的負荷,現在都採用快取記憶體.即存放最近查詢過的網域名稱及從何處獲得的網域名稱對映.
1.應用層 : 定義應用程式間通訊和互動的規則. 常見的應用層協議有http,ftp,smtp,pop3,dns.
2.傳輸層 : 向兩個主機中程序間的通訊提供資料傳輸服務.應用層利用該服務傳送應用層報文.主要使用2種協議:
udp(user datagram protocal):
3.網路層 : 選擇合適的路由,是傳下來的分組能夠通過路由找到目的主機.這層會將傳輸層產生的報文段封裝成分組或包packet.
建立連線的過程:
之所以要client端多傳送一次確認,是為了防止已失效的連線請求報文又傳送到了server端.
假設先前傳了一次連線請求,但因為網路問題,遲到了一會兒,這期間又傳了一起請求連線,且資料已經傳完.如果沒有多一次的確認,這時server會以為這延時到的請求是客戶端新提的,然後建立連線.但客戶端已經接受完資料了,因此並不會再傳送資料,那這一條連線就浪費了.
連線釋放的過程:
client在時間等待狀態等待2msl,是因為兩個原因.
1 為了保證它傳送的最後乙個ack報文段能到達server端. 這個報文段可能丟失,伺服器端收不到確認,會超時重傳,客戶端就可以在這個時間內重傳一次確認,使兩者都進入正常的closed狀態.
2 防止之前提到的』已失效連線請求報文段』出現在這次連線中.客戶端在傳送完最後乙個確認之後,再經過2msl,就可以使本次連線中所產生的所有報文段從網路中消失.
server端在收到確認後,就進入closed狀態,然後撤銷tcb,結束這次連線.它結束連線的時間要比client端早.
這裡特別提一下方法,方法其實就是對所請求物件的操作.
常見的如下幾種,
方法意義
get請求讀取url標誌的資訊
post
向伺服器新增資訊
option
請求一些選項的資訊
head
請求讀取url標誌的資訊的頭部
delete
刪除url標誌的資訊
put向url標誌的資訊下儲存乙個文件
trace
用來進行環迴測試的請求報文
connect
用於**伺服器
快取的流程:
在第一次請求回應的頭部中,通過cache-control說明檔案20s後過期,同時定義了檔案最後修改時間. 10s時,請求檔案時,直接從快取中讀取內容,這是屬於強快取. 當21s時,快取時間過期了,此時又一次請求,請求頭部中的if-modified-since與起初響應頭部的last-modified相同,若檔案沒有改動,則返回304和乙個空的響應,讓瀏覽器繼續使用本地快取.若改動了,則是一次全新的內容響應了,則返回200.這時的快取是協商快取.
這裡有一點要注意的是,有時只是檔案的時間改變了,內容沒有改變,那它也不應該作為新的資源返回.這時可以通過頭部的etag和if-none-match來判斷.
不知不覺寫了這麼些了,整篇文章更像是對基本網路知識的乙個回顧總結,整個寫的過程中,一邊抱著《計算機網路》相應的章節讀了一篇,又再回頭來記錄,寫完感覺是把已還給老師的網路知識又拿回來一丟丟(囧~).
希望能對才接觸網路或忘了一些基礎的小夥伴們有一些幫助.越看書越覺得不懂的好多啊,也希望自己能繼續深入,盡快達到寫高階篇的階段吧.加油 !
開發中Performance的那些事兒
效能 這個詞,不管是在日常生活還是寫程式的時候,都經常被提到。比方說,買新電腦的時候,我們會說 原來的電腦效能跟不上了 寫程式的時候,我們會說,這個程式效能需要優化一下 那麼,你有沒有想過,我們常常掛在嘴邊的 效能 到底指的是什麼呢?我們能不能給效能下乙個明確的定義,然後來進行準確的比較呢?在計算機...
關於iOS開發記憶體管理的那些事兒
1.在objc中物件是儲存在堆中的,系統並不會自動釋放堆中的記憶體 注意基本型別例如int,float是由系統自己管理的,放在棧上 2.我們可以通過dealloc方法來檢視是否乙個物件已經被 如果沒有被 則有可能造成記憶體洩露。如果乙個物件被釋放之後,那麼最後引用它的變數 我們手動設定為nil,否則...
關於BOM的那些事兒
window物件 1.window物件是最頂層的物件 2.window物件有六大屬性,這六大屬性本身也是物件 3.window物件旗下的document也是物件 並且document旗下有五大屬性 4.document旗下的五大屬性又是物件,總結 都是物件 window screenleft 和 s...