手把手教你用 Node 實(shí)現(xiàn) HTTP 協(xié)議(一)

手把手教你用 Node 實(shí)現(xiàn) HTTP 協(xié)議(一)

在開始文章前,我們需要對一些基礎(chǔ)知識有一些了解,比如 HTTP 協(xié)議是什么,HTTP 報(bào)文的格式,HTTP 協(xié)議的基礎(chǔ)等等;

本篇文章將會(huì)使用到以下知識,希望讀者在開始閱讀前對基礎(chǔ)知識有一些掌握:

  • Node 的基本用法;
  • Typescript 語法的基本理解;
  • Postman 的基本使用方法;

我們最終的目標(biāo)是實(shí)現(xiàn)由接口工具 Postman 發(fā)起一個(gè)請求,我們的 http 協(xié)議將請求的信息解析完成后,由我們的 http 服務(wù)端返回一個(gè)請求信息的 JSON 字符串,效果圖如下:

最終效果圖

我們的代碼最終調(diào)用效果如下:

import http from './src/Http';

const server = http.createServer((req, res) => {
  res.setHeader('Content-Type', 'application/json')
  res.end(200, JSON.stringify(req.httpMessage));
});

server.listen(8888, () => {
  console.log("server is listening in 8888...");
});

有些朋友可能覺得上面的代碼有點(diǎn)眼熟,其實(shí)上面的代碼調(diào)用看起來就像是 Node 的 http 模塊,我們這個(gè)教程的目的也可以說是實(shí)現(xiàn)一個(gè) http 模塊,可以接受 HTTP 請求,并且響應(yīng)處理結(jié)果。

現(xiàn)在我們先來了解幾個(gè)開頭提到的基礎(chǔ)知識:

HTTP 協(xié)議是什么?

  • HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。
  • 我們使用 HTTP 協(xié)議規(guī)范來完成客戶與服務(wù)器之間的通信,形象一點(diǎn)的說就是通信的雙方需要按照規(guī)范來進(jìn)行通信。
  • 比如狀態(tài)碼就是一個(gè)規(guī)范,狀態(tài)碼規(guī)定了 1xx~5xx 代表的含義,500 通常代表服務(wù)器內(nèi)部錯(cuò)誤,然而你也可以用 500 代表服務(wù)器成功處理,但是這樣就屬于不遵守規(guī)范了。
  • HTTP 協(xié)議就是由一些預(yù)定義的規(guī)范所組成的最佳實(shí)踐,實(shí)現(xiàn) HTTP 協(xié)議換個(gè)說法就是用代碼實(shí)現(xiàn)這些規(guī)范,遵循 HTTP 協(xié)議規(guī)范的雙方可以進(jìn)行通信。

HTTP 報(bào)文的格式

  • 如果說 HTTP 是因特網(wǎng)的信使,那么 HTTP 報(bào)文就是它用來搬東西的包裹。
  • HTTP 報(bào)文是簡單的格式化數(shù)據(jù)塊。它們由三部分組成:對報(bào)文進(jìn)行描述的起始行(start line)、包含屬性的首部(header)塊、以及可選的包含數(shù)據(jù)的主體(body)部分。
  • 起步行和首部就是由行分隔的 ASCII 文本。每行都以一個(gè) 由兩個(gè)字符組成的行終止序列作為結(jié)束,其中包括一個(gè)回車符(ASCII 碼 13)和一個(gè)換行符(ASCII 碼 10)。這個(gè)行終止序列可以寫作 CRLF。
  • 報(bào)文的語法
    • 請求報(bào)文的格式 <method><request-URL><version> CRLF <headers> CRLF <entity-body>
    • 響應(yīng)報(bào)文的格式 <version><status><reason-phrase> CRLF <headers> CRLF <entity-body>

HTTP 協(xié)議的基礎(chǔ)

  • HTTP 協(xié)議遵循 TCP/IP 協(xié)議簇規(guī)范,屬于 TCP/IP 中的應(yīng)用層協(xié)議,建立在 TCP 可靠協(xié)議的基礎(chǔ)上,處理 TCP 通信中的字節(jié)流,將字節(jié)流轉(zhuǎn)換成有意義的 HTTP 協(xié)議規(guī)范。
  • Node 的 net 模塊用于創(chuàng)建基于流的 TCP 或 IPC 的服務(wù)器,所以我們會(huì)在 net 模塊的(TCP)基礎(chǔ)上實(shí)現(xiàn) HTTP 協(xié)議。

從上面的幾點(diǎn)可以看出,我們最主要的任務(wù)有兩個(gè),第一是建立 TCP 通信管道用于客戶端與服務(wù)器的全雙工通信,第二就是解析 HTTP 報(bào)文。

由于 TCP 協(xié)議已經(jīng)被 Node 的 net 模塊封裝好了,所以我們下一章重點(diǎn)講述對 HTTP 報(bào)文的解析。

原文地址,歡迎 Star

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自: 老李的地下室:http://www.cnblogs.com/li0803/archive/2008/11/...
    yexue閱讀 662評論 0 4
  • 引言 HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。它于1990年...
    吉盧奧閱讀 339評論 0 1
  • 2008-11-03 09:11 by Hundre,848587閱讀,35評論,收藏,編輯 轉(zhuǎn)自:http://...
    牛1688閱讀 832評論 0 11
  • HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。它于1990年提出,...
    lilinjianshu閱讀 562評論 0 1
  • 引言 HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。它于19...
    北京小六閱讀 809評論 0 8

友情鏈接更多精彩內(nèi)容