5層網路模型介紹
低三層
物理層主要作用是定義物理裝置如何傳輸資料
資料鏈路層在通訊的實體間建立資料鏈路連線
網路層為資料在結點之間傳輸建立邏輯鏈路
傳輸層
向使用者提供可靠的端到端(End一to一End)服務
傳輸層向高層遮蔽了下層資料通訊的細節
應用層
為應用軟體提供了很多服務
構建於TCP協議之上
遮蔽網路傳輸相關細節
HTTP協議的發展歷史
HTTP/0.9
只有一個命令GET
沒有HEADER等描述資料的資訊
伺服器傳送完畢,就關閉TCP連線
HTTP/1.0
增加了很多命令
增加statuscode和header
多字符集支援、多部分傳送、許可權、快取等
HTTP/1.1
持久連線
pipeline
增加host和其他一些命令
HTTP2
所有資料以二進位制傳輸
同一個連線裡面傳送多個請求不再需要按照順序來
頭資訊壓縮以及推送等提高效率的功能
HTTP的三次握手
http 1.0 請求一次 tcp連線一次(有三次握手)
http 1.1 請求多次 tcp 保持連線(第二次請求,沒有三次握手的開銷)
http2.0 請求併發,同一個使用者,訪問網頁只需要一次 tcp 連結
為了防止服務端開啟無用的連線,如,如果只有一次握手,客戶端傳送請求,服務端開啟連線,由於網路問題,客戶端沒接收資訊,關閉了,服務端會一直開著,形成無用連線。
URI-URL和URN
URI
Uniform Resource Identifier/統一資源標誌符
用來唯一標識網際網路上的資訊資源
包括URL和URN
URL
Uniform Resource Locator / 統一資源定位器
user:pass@host.com:80/path?query=…
此類格式的都叫做URL,比如ftp協議
URN
永久統一資源定位符
在資源移動之後還能被找到
目前還沒有非常成熟的使用方案
HTTP報文格式
HTTP方法
用來定義對於資源的操作
常用有GET、POST等
從定義上講有各自的語義
HTTP CODE
定義伺服器對請求的處理結果
各個區間的CODE有各自的語義
好的HTTP服務可以通過CODE判斷結果
建立一個最簡單的web服務
進入檔案目錄,命令列 node server.js,開啟網頁 localhost:8888即可。
// server.js
const http = require('http')
http.createServer(function (request, response) {
console.log('request come', request.url)
response.end('123')
}).listen(8888)
console.log('server listening on 8888')
複製程式碼