HTTP協議基礎及發展歷史

littlebirdflying發表於2018-09-22

5層網路模型介紹

HTTP協議基礎及發展歷史

低三層

物理層主要作用是定義物理裝置如何傳輸資料

資料鏈路層在通訊的實體間建立資料鏈路連線

網路層為資料在結點之間傳輸建立邏輯鏈路

傳輸層

向使用者提供可靠的端到端(End一to一End)服務

傳輸層向高層遮蔽了下層資料通訊的細節

應用層

為應用軟體提供了很多服務

構建於TCP協議之上

遮蔽網路傳輸相關細節

HTTP協議的發展歷史

HTTP/0.9

只有一個命令GET

沒有HEADER等描述資料的資訊

伺服器傳送完畢,就關閉TCP連線

HTTP/1.0

增加了很多命令

增加statuscode和header

多字符集支援、多部分傳送、許可權、快取等

HTTP/1.1

持久連線

pipeline

增加host和其他一些命令

HTTP2

所有資料以二進位制傳輸

同一個連線裡面傳送多個請求不再需要按照順序來

頭資訊壓縮以及推送等提高效率的功能

HTTP的三次握手

HTTP協議基礎及發展歷史

http 1.0 請求一次 tcp連線一次(有三次握手)

http 1.1 請求多次 tcp 保持連線(第二次請求,沒有三次握手的開銷)

http2.0 請求併發,同一個使用者,訪問網頁只需要一次 tcp 連結

HTTP協議基礎及發展歷史

為了防止服務端開啟無用的連線,如,如果只有一次握手,客戶端傳送請求,服務端開啟連線,由於網路問題,客戶端沒接收資訊,關閉了,服務端會一直開著,形成無用連線。

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協議基礎及發展歷史

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')
複製程式碼

相關文章