最近想好好總結一下網路請求的一些相關的內容,隨便深入去**一下內部是如何實現的。
這個名詞可能經常被提到過,這裡也順便簡單過一遍。
簡單看看它常用的行為
簡單看看請求的狀態碼
就簡單理解下就好,可以把它當成乙個規範。
我建議可以去看這兩篇文章,寫得都比較清楚
1.網路osi模型
常說的網路七層模型(最好還是能記住)
(1)應用層
(2)表示層
(3)會話層
(4)傳輸層
(5)網路層
(6)資料鏈路層
(7)物理層
當然一般都可以把最上邊的三層當成乙個應用層的整體。
2.每層的工作
我是要照著文章的來說
這篇文章感覺寫得很特別,別人都是從上層往下層寫,他是從下層往上層寫。
物理層就不說了
(1)資料鏈路層
這層有個乙太網協議,把資料報稱為幀,幀的結構如下
每一幀最短為64位元組,最長1518位元組
(2)網路層
網路層就是ip協議所在的層。它的幀結構如下
(3)傳輸層
傳輸層就是tcp/dup協議所在的層。它的幀結構如下
而在應用層的資料就是這裡的data,上面是從下層到上層的分析,那麼如果從上層到下層的分析呢。
其實網路中資料的傳輸就是傳包,也就是最上面說的幀,而這個包可以看成是自上而下每經過一層到會封裝一層變成乙個新包,然後接收端自下而上一層層拆包,最終拿到請求的資料。
3.整個過程涉及到的名詞
上面的流程我不想講得太相信,免得會感覺亂,反正記住他們間的通訊是傳包就行,這裡也總結下這個過程中涉及到的一些名詞。
(1)mac位址
每塊網絡卡出廠的時候,都有乙個全世界獨一無二的mac位址,長度是48個二進位制位,通常用12個十六進製制數表示。通過自身的mac位址和對方的mac位址,可以找到相互通訊的兩個端
(2)ip位址
mac位址不能通過跨網域找到另一端的mac位址。這時就需要ip位址。ip協議第四版,簡稱ipv4,規定ip位址由32個二進位制組成,ip位址用於標識在網路中的計算機。
(3)子網掩碼
什麼是子網掩碼,就是表示子網路特徵的乙個引數。它用來判斷兩個ip位址是否屬於同乙個網路中。比如說你兩個端都連同乙個路由器,那他們就屬於同個網路。
子網掩碼判斷的方法是與ip位址做and運算,如果結果相同說明兩個ip處於同一網路。
(4)dns
dns是什麼,簡單的說,通訊是需要兩端的ip位址,但是有時候我們請求網路是「www.baidu.com」,這時候就可以通過dns協議獲取這個位址的ip位址。
上面講的整個流程中並沒有提到socket,而我們開發時經常能聽到http是建立在socket上,那這個socket是什麼呢。
socket起源於unix,它不屬於任何一層,它是應用層與傳輸層之間的乙個抽象層,是抽象層,這個抽象很重要。為什麼要有這樣的乙個抽象層呢,因為底層的操作過於煩雜,所以就需要乙個東西來幫你做底層的操作,所以socket也是乙個門面模式的體現,你只需要呼叫socket的方法,socket來幫你做下層的操作。(別人的圖)
關於socket我也不是很了解,不知道要怎麼講好,要注意的是socket有個緩衝區,資料的傳輸過程不是直接傳送,而是先傳送到緩衝佇列,再傳送給服務端。
http屬於應用層的協議,關於http可能講得比較多的就是報文
(1)請求報文
(2)響應報文
報文的詳解網上很多,我就不copy了,需要注意的是請求頭中content-type這個key,這個mime所對應的值其實還是很多的
其中比較常用的幾個型別可以參考這篇文章最終形成的報文的形式
這些還是要注意一下,型別不正確的話有可能會導致服務端接收不到資料。
然後就是資料的傳輸,資料傳輸用post請求的multipart/form-data型別進行資料的傳輸。
對這個傳輸過程其實我是比較迷惑,我看過一句話,應用層主要做包裝資料的工作,傳輸層做傳輸資料的操作。
網上很多介紹http的一些基礎的內容,我這不想重複去寫。那麼我就想問乙個問題:http請求,資料是在應用層包裝然後用流寫到緩衝佇列的嗎?
普通的請求看是這樣的說法合理,報文所佔的空間肯定是占用記憶體空間。但是傳大檔案的話就不太合理了,因為如果是要拼接成報文,那麼檔案就會寫入到記憶體中,這就很不合理。
很可惜的是我在網上找了很久都沒找到這個問題,於是我就問了乙個寫底層**的朋友,他告訴我。
普通請求就是在應用層拼接完整的報文,然後以流的形式給socket的sendq,傳檔案的話就是拼接頭把頭給sendq,然後檔案直接從檔案目錄直接給sendq
Restful風格請求方式技巧
通常我們的form表單的請求方式是pos方式,我們在使用restful風格的api時,可以修改表單的請求方式為其他,具體如下 1 springmvc中配置hiddenhttpmethodfilter springboot自動配置好的 2 頁面建立乙個post表單 3 建立乙個input項,name ...
restful請求風格使用詳解
參考 傳統方式操作資源 通過不同引數實現不同的效果!方法單一,post和get 查詢,get 新增,post 更新,post 刪除,get或post 查詢,get 新增,post 更新,put 刪除,delete restful架構風格規定,資料的元操作,即crud create,read,upda...
網路請求過程,網域名稱,dns,url,uri學習
問題 在瀏覽器裡面輸入是如何呈現 的頁面給我們看的 大概流程如下所示 網域名稱解析 tcp的三次握手 建立tcp連線後發起http請求 伺服器響應http請求 瀏覽器解析html 同時請求html 中的資源 如js css 等 最後瀏覽器對頁面進行渲染並呈現給使用者 網域名稱只是為了方便閱讀和記憶,...