1. 程式人生 > >瀏覽器的一個請求從傳送到返回

瀏覽器的一個請求從傳送到返回

1、先從網路模型層面:

client (瀏覽器)與 server 通過 http 協議通訊,http 協議屬於應用層協議,http 基於 tcp 協議,所以 client 與 server 主要通過 socket 進行通訊;

而 tcp 屬於傳輸層協議、如果走 https 還需要會話層 TLS、SSL 等協議; 傳輸層之下網路層,這裡主要是路由協議 OSPF 等進行路由轉發之類的。再向下資料鏈路層主要是 ARP、RARP 協議完成 IP 和 Mac 地址互解析,再向下到最底層物理層基本就是 IEEE 802.X 等協議進行資料位元流轉成高低電平的的一些定義等等;

當瀏覽器發出請求,首先進行資料封包,然後資料鏈路層解析 IP 與 mac 地址的對映,然後上層網路層進行路由查表路由,通過應用層 DNS 協議得到目標地址對應的 IP ,在這裡進行 n 跳的路由尋路;而傳輸層 tcp 協議可以說下比較經典的三次握手、四次分手的過程和狀態機,這裡放個圖可以作為參考:

2、應用層方面:

資料交換主要通過 http 協議, http 協議是無狀態協議,這裡可以談一談 post、get 的區別以及 RESTFul 介面設計,然後可以講伺服器 server 模型 epoll、select 等,接著可以根據實際經驗講下 server 處理流程,比如我: server 這邊 Nginx 拿到請求,進行一些驗證,比如黑名單攔截之類的,然後 Nginx 直接處理靜態資源請求,其他請求 Nginx 轉發給後端伺服器,這裡我用 uWSGI, 他們之間通過 uwsgi 協議通訊,uWSGI 拿到請求,可以進行一些邏輯, 驗證黑名單、判斷爬蟲等,根據 wsgi 標準,把拿到的 environs 引數扔給 Django ,Django 根據 wsgi 標準接收請求和 env, 然後開始 start_response ,先跑 Django 相關後臺邏輯,Django 拿到請求執行 request middleware 內的相關邏輯,然後路由到相應 view 執行邏輯,出錯執行 exception middleware 相關邏輯,接著 response 前執行 response middleware 邏輯,最後通過 wsgi 標準構造 response, 拿到需要返回的東西,設定一些 headers,或者 cookies 之類的,最後 finish_response 返回,再通過 uWSGI 給 Nginx ,Nginx 返回給瀏覽器。

談完後 CTO 根據我說的一些細節提出了一些問題,最後當時就談了 offer ,CTO 說不走 hr 那邊了直接和我談,比較意外的是 offer 給的比我自己要的還高 5k。對於第一次找工作的我來說當時滿心激動。

最後大概說說環境:公司在五道口一棟寫字樓內容,規模還算比較大,聽 CTO 談做的事情也比較有意思,有機器學習、大資料等等 ( 主要是處理各種初高中學科的題目,涉及到文字識別深度學習等等,當然我如果進去肯定要從業務寫起 ),包午餐、下午茶之類的其他我就不太清楚了,因為下午就走了,不過公司好像是每週六天班。公司發展感覺還是比較高速,感興趣的同學可以去試試。