標籤:嵌套 進階 電訊廠商 資料包 learn 資源 伺服器端 node.js 網域名稱註冊
一、HTTP相關知識
HTTP是一種協議,電腦要共同遵從這種規則,才能相互連信。
- http用戶端發起請求,建立連接埠
- http伺服器在連接埠監聽客戶請求
- http伺服器向用戶端返回狀態和內容
瀏覽器開啟一個網站,http走過的環節
Ⅰ 首先,對網站進行DNS網域名稱解析
- 1、瀏覽器搜尋自身的DNS緩衝
- 2、搜尋作業系統自身的DNS緩衝(瀏覽器沒有找到緩衝或到期)
- 3、讀取本地的HOST檔案
- 4、瀏覽器發起一個DNS的一個系統調用
4.1寬頻電訊廠商伺服器查看本身緩衝-》
4.2電訊廠商伺服器發起一個迭代DNS解析的請求(根域->頂級域->網域名稱註冊商(IP地址))
4.3電訊廠商伺服器把結果返回給作業系統核心同時緩衝起來
4.4作業系統核心把結果返回給瀏覽器
- 5、讓瀏覽器拿到網站的IP地址,DNS解析完成,發起HTTP"三向交握"
- 6、TCP/IP串連建立起來後,瀏覽器就可以向伺服器發送HTTP請求,比方說,用HTTP的GET方法請求一個根域裡的一個網域名稱,協議可以採用HTTP1.0的一個協議
- 7、伺服器端接受到了這個請求,根據路徑參數,經過後端的一些處理之後,把處理後的一個結果的資料返回給瀏覽器。(這時會把網站完整的HTML頁面代碼返回給瀏覽器)
- 8、瀏覽器拿到了網站的完整的HTML頁面代碼,在解析和渲染這個頁面的時候,裡面的JS、CSS、圖片靜態資源,他們同樣也是一個個HTTP請求,都需要經過上面的主要的七個步驟.
- 9、瀏覽器根據拿到的資源對頁面進行渲染,最終把一個完整的頁面呈現給了使用者
Ⅱ HTTP流程可分為請求/響應兩部分
HTTP的組成:
- HTTP: 發送的是一些附加的資訊(內容類型伺服器發送響應的日期,HTTP狀態代碼)
- 本文資訊: 使用者提交的表單資訊
二、以具體網站分析HTTP的流程
http要求方法:
- Get:擷取,讀取資料
- Post:提交資源
- Put:更新
- Delete:刪除
- Head 與get方法相同,但伺服器不傳回資源
狀態代碼:伺服器端返回瀏覽器,告知瀏覽器請求成功或失敗的資訊
- 1XX請求已經接受
- 2XX請求成功並處理成功
- 3XX重新導向
- 4XX用戶端錯誤
- 5XX伺服器端錯誤
- 200:OK,請求成功
- 400:用戶端請求有語法錯誤
- 401:請求未經授權
- 403:收到請求,但不提供服務
- 404:資源未找到
- 500:伺服器端未知錯誤
- 503:伺服器端當前不能處理請求
三、事件回調進階
Nodejs中http模組不解析請求的具體內容,只分離出要求標頭和請求體 1、什麼是回呼函數?
回調試非同步編程時的基礎,將後續邏輯封裝成起始函數的參數,逐層嵌套
function learn(something){ console.log(something)}function we(callback, something){ something += ‘is cool‘ callback(something)}//傳入具名函數we(learn, ‘Nodejs‘)//傳入匿名函數we(function(something){ console.log(something)}, ‘Jade‘)2、什麼事同步/非同步?
同步:發送方發送資料後,等待接收方發迴響應以後才發下一個資料包的通訊方式
非同步:發送方發出資料後,不等接收方發迴響應,接著發送下個資料包的通訊方式
3、什麼是I/O?
磁碟的寫入(in)磁碟的讀取(out)
4、什麼是單線程/多線程?
一次只能執行一個程式叫做單線程 一次能執行多個程式叫做多線程
5、什麼是阻塞/非阻塞?
阻塞:前一個程式未執行完就得一直等待
非阻塞:前一個程式未執行完時可以掛起,繼續執行其他程式,等到使用時再執行
6、什麼是事件?
一個觸發動作(例如點擊按鈕)
7、什麼是事件驅動?
一個觸發動作引起的操作(例如點擊按鈕後彈出一個對話方塊)
function clickIt(e){ window.alert(‘Button is clicked‘)}var button = document.getElementById(‘#button‘) button.addEventListener(‘click‘, clickIt)8、什麼是基於事件驅動的回調?
為了某個事件註冊了回呼函數,但是這個回呼函數不是馬上執行,只有當事件發生的時候,才會調用回掉函數,這種函數執行的方式叫做事件驅動~這種註冊回調就是基於事件驅動的回調,如果這些回調和非同步I/O(資料寫入、讀取)操作相關,可以看作是基於回調的非同步I/O。只不過這種回調在nodejs中是有事件來驅動的
9、什麼是事件迴圈?
事件迴圈Eventloop,倘若有大量的非同步作業,一些I/O的耗時操作,甚至是一些定時器控制的延時操作,它們完成的時候都要調用相應的回呼函數,而從完成一些密集的任務,而又不會阻塞整個程式執行的流程,此時需要一種機制來管理,這種機制叫做事件迴圈 總而言之,管理大量非同步作業的機制叫做事件迴圈
EventLoop: 回呼函數隊列,非同步執行的函數會被壓入這個隊列;隊列被迴圈查詢。
【入門Node.js之HTTP