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 |