5-1 Node.js HTTP模塊

Node.js是一個Javascript運行環(huán)境(runtime)露懒。實際上它是對Google V8引擎進行了封裝潭苞。

所以 語法還是JavaScript的語法侥袜,只不過它封裝了一些類庫团甲,可以更多的事瓜晤。


HTTP中請求request和響應response信息說明

Request

http.ServerRequest 是 HTTP請求的信息,是后端開發(fā)者最關注的內容饼煞。
它一般由http.Server 的 request 事件發(fā)送源葫,作為第一個參數(shù)傳遞,
通常簡稱request 或 req砖瞧。
HTTP 請求一般可以分為兩部分:
** 請求頭(Request Header)**
請求體(Requset Body)
以上內容由于長度較短都可以在請求頭解析完成后立即讀取息堂。
而請求體可能相對較長,需要一定的時間傳輸块促,
因此 http.ServerRequest 提供了以下4個事件用于控制請求體傳輸荣堰。

事件 含義
data 當請求體數(shù)據(jù)到來時,該事件被觸發(fā)竭翠。該事件提供一個參數(shù)
chunk 表示接收到的數(shù)據(jù)振坚。如果該事件沒有被監(jiān)聽,那么請求體將會被拋棄斋扰。該事件可能會被調用多次渡八。
end 當請求體數(shù)據(jù)傳輸完成時啃洋,該事件被觸發(fā),此后將不會再有數(shù)據(jù)到來屎鳍。
close 用戶當前請求結束時宏娄,該事件被觸發(fā)。不同于end逮壁,如果用戶強制終止了傳輸绝编,也還是調用close
ServerRequest 的屬性
事件 含義
complete 客戶端請求是否已經(jīng)發(fā)送完成
httpVersion HTTP 協(xié)議版本,通常是 1.0 或 1.1
method HTTP 請求方法貌踏,如 GET十饥、POST、PUT祖乳、DELETE 等
url 原始的請求路徑
headers HTTP 請求頭
trailers HTTP 請求尾(不常見)
connection 當前 HTTP 連接套接字逗堵,為 net.Socket 的實例
socket connection 屬性的別名
client client 屬性的別名

Response

http.ClientResponse 與 http.ServerRequest 相似,
提供了三個事件data眷昆、end和close蜒秤,
分別在數(shù)據(jù)到達、傳輸結束和連接結束時觸發(fā)亚斋,
其中data事件傳遞一個參數(shù)chunk作媚,表示接收到的數(shù)據(jù)。

ClientResponse 的屬性

名稱 含義
statusCode HTTP 狀態(tài)碼帅刊,如 200纸泡、404、500
httpVersion HTTP 協(xié)議版本赖瞒,通常是 1.0 或 1.1
headers HTTP 請求頭
trailers HTTP 請求尾(不常見)

Header 頭詳解

HTTP(HyperTextTransferProtocol)即超文本傳輸協(xié)議女揭,目前網(wǎng)頁傳輸?shù)牡耐ㄓ脜f(xié)議。
HTTP協(xié)議采用了請求/響應模型栏饮,瀏覽器或其他客戶端發(fā)出請求吧兔,服務器給與響應。
就整個網(wǎng)絡資源傳輸而言袍嬉,包括message-header和message-body兩部分境蔼。
首先傳遞message-** header,即http** header消息** 伺通。
**http header 消息通常被分為4個部分:general header, request header, response header, entity header箍土。
但是這種分法就理解而言,感覺界限不太明確泵殴。
根據(jù)維基百科對http header內容的組織形式涮帘,大體分為Request和Response兩部分拼苍。

Requests部分

Header 解釋 示例
Accept 指定客戶端能夠接收的內容類型 Accept: text/plain, text/html
Accept-Charset 瀏覽器可以接受的字符編碼集笑诅。 Accept-Charset: iso-8859-5
Accept-Encoding 指定瀏覽器可以支持的web服務器返回內容壓縮編碼類型调缨。 Accept-Encoding: compress, gzip
Accept-Language 瀏覽器可接受的語言 Accept-Language: en,zh
Accept-Ranges 可以請求網(wǎng)頁實體的一個或者多個子范圍字段 Accept-Ranges: bytes
Authorization HTTP授權的授權證書 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control 指定請求和響應遵循的緩存機制 Cache-Control: no-cache
Connection 表示是否需要持久連接。(HTTP 1.1默認進行持久連接) Connection: close
Cookie HTTP請求發(fā)送時吆你,會把保存在該請求域名下的所有cookie值一起發(fā)送給web服務器弦叶。 Cookie: $Version=1; Skin=new;
Content-Length 請求的內容長度 Content-Length: 348
Content-Type 請求的與實體對應的MIME信息 Content-Type: application/x-www-form-urlencoded
Date 請求發(fā)送的日期和時間 Date: Tue, 15 Nov 2010 08:12:31 GMT
Expect 請求的特定的服務器行為 Expect: 100-continue
From 發(fā)出請求的用戶的Email From: user@email.com
Host 指定請求的服務器的域名和端口號 Host: www.zcmhi.com
If-Match 只有請求內容與實體相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since 如果請求的部分在指定時間之后被修改則請求成功,未被修改則返回304代碼 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match 如果內容未改變返回304代碼妇多,參數(shù)為服務器先前發(fā)送的Etag伤哺,與服務器回應的Etag比較判斷是否改變 If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Range 如果實體未改變,服務器發(fā)送客戶端丟失的部分者祖,否則發(fā)送整個實體立莉。 參數(shù)也為Etag If-Range: “737060cd8c284d8af7ad3082f209582d”
If-Unmodified-Since 只在實體在指定時間之后未被修改才請求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
Max-Forwards 限制信息通過代理和網(wǎng)關傳送的時間 Max-Forwards: 10
Pragma 用來包含實現(xiàn)特定的指令 Pragma: no-cache
Proxy-Authorization 連接到代理的授權證書 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range 只請求實體的一部分,指定范圍 Range: bytes=500-999
Referer 先前網(wǎng)頁的地址七问,當前請求網(wǎng)頁緊隨其后,即來路 Referer: http://www.baidu.com
TE 客戶端愿意接受的傳輸編碼蜓耻,并通知服務器接受接受尾加頭信息 TE: trailers,deflate;q=0.5
Upgrade 向服務器指定某種傳輸協(xié)議以便服務器進行轉換(如果支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-Agent User-Agent的內容包含發(fā)出請求的用戶信息 User-Agent: Mozilla/5.0 (Linux; X11)
Via 通知中間網(wǎng)關或代理服務器地址,通信協(xié)議 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 關于消息實體的警告信息 Warn: 199 Miscellaneous warning

Responses 部分

Header 解釋 示例
Accept-Ranges 表明服務器是否支持指定范圍請求及哪種類型的分段請求 Accept-Ranges: bytes
Age 從原始服務器到代理緩存形成的估算時間(以秒計复隆,非負) Age: 12
Allow 對某網(wǎng)絡資源的有效的請求行為腕柜,不允許則返回405 Allow: GET, HEAD
Cache-Control 告訴所有的緩存機制是否可以緩存及哪種類型 Cache-Control: no-cache
Content-Encoding web服務器支持的返回內容壓縮編碼類型彩郊。 Content-Encoding: gzip
Content-Language 響應體的語言 Content-Language: en,zh
Content-Length 響應體的長度 Content-Length: 348
Content-Location 請求資源可替代的備用的另一地址 Content-Location: /index.htm
Content-MD5 返回資源的MD5校驗值 Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Range 在整個返回體中本部分的字節(jié)位置 Content-Range: bytes 21010-47021/47022
Content-Type 返回內容的MIME類型 Content-Type: text/html; charset=utf-8
Date 原始服務器消息發(fā)出的時間 Date: Tue, 15 Nov 2010 08:12:31 GMT
ETag 請求變量的實體標簽的當前值 ETag: “737060cd8c284d8af7ad3082f209582d”
Expires 響應過期的日期和時間 Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last-Modified 請求資源的最后修改時間 Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
Location 用來重定向接收方到非請求URL的位置來完成請求或標識新的資源 Location: http://www.zcmhi.com/archives/94.html
Pragma 包括實現(xiàn)特定的指令,它可應用到響應鏈上的任何接收方 Pragma: no-cache
Proxy-Authenticate 它指出認證方案和可應用到代理的該URL上的參數(shù) Proxy-Authenticate: Basic
refresh 應用于重定向或一個新的資源被創(chuàng)造有勾,在5秒之后重定向(由網(wǎng)景提出,被大部分瀏覽器支持) Refresh: 5; url= http://www.zcmhi.com/archives/94.html
Retry-After 如果實體暫時不可取古程,通知客戶端在指定時間之后再次嘗試 Retry-After: 120
Server web服務器軟件名稱 Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Set-Cookie 設置Http Cookie Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
Trailer 指出頭域在分塊傳輸編碼的尾部存在 Trailer: Max-Forwards
Transfer-Encoding 文件傳輸編碼 Transfer-Encoding:chunked
Vary 告訴下游代理是使用緩存響應還是從原始服務器請求 Vary: *
Via 告知代理客戶端響應是通過哪里發(fā)送的 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 警告實體可能存在的問題 Warning: 199 Miscellaneous warning
WWW-Authenticate 表明客戶端請求實體應該使用的授權方案 WWW-Authenticate: Basic
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蔼卡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挣磨,更是在濱河造成了極大的恐慌菲宴,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趋急,死亡現(xiàn)場離奇詭異喝峦,居然都是意外死亡,警方通過查閱死者的電腦和手機呜达,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門谣蠢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人查近,你說我怎么就攤上這事眉踱。” “怎么了霜威?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵谈喳,是天一觀的道長。 經(jīng)常有香客問我戈泼,道長婿禽,這世上最難降的妖魔是什么赏僧? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮扭倾,結果婚禮上淀零,老公的妹妹穿的比我還像新娘。我一直安慰自己膛壹,他們只是感情好驾中,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著模聋,像睡著了一般肩民。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上链方,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天此改,我揣著相機與錄音,去河邊找鬼侄柔。 笑死共啃,一個胖子當著我的面吹牛,可吹牛的內容都是我干的暂题。 我是一名探鬼主播移剪,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼薪者!你這毒婦竟也來了纵苛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤言津,失蹤者是張志新(化名)和其女友劉穎攻人,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悬槽,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡怀吻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了初婆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓬坡。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖磅叛,靈堂內的尸體忽然破棺而出屑咳,到底是詐尸還是另有隱情,我是刑警寧澤弊琴,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布兆龙,位于F島的核電站,受9級特大地震影響敲董,放射性物質發(fā)生泄漏紫皇。R本人自食惡果不足惜慰安,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坝橡。 院中可真熱鬧泻帮,春花似錦精置、人聲如沸计寇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽番宁。三九已至,卻和暖如春赖阻,著一層夾襖步出監(jiān)牢的瞬間蝶押,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工火欧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棋电,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓苇侵,卻偏偏與公主長得像赶盔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子榆浓,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容