在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 靈機(jī)一點
文本編碼
小結(jié)
API 走馬觀花
API 走馬觀花
迭代
小結(jié)
運行
回調(diào)
需求
代碼設(shè)計模式
進(jìn)程介紹
模塊
工程目錄
小結(jié)
小結(jié)
遍歷目錄
小結(jié)
小結(jié)
API 走馬觀花
用途
NPM
小結(jié)
安裝
網(wǎng)絡(luò)操作介紹
二進(jìn)制模塊
什么是 NodeJS
命令行程序
靈機(jī)一點
域(Domain)
應(yīng)用場景
模塊路徑解析規(guī)則
文件拷貝

靈機(jī)一點

使用 NodeJS 操作網(wǎng)絡(luò),特別是操作 HTTP 請求和響應(yīng)時會遇到一些驚喜,這里對一些常見問題做解答。

問: 為什么通過 headers 對象訪問到的 HTTP 請求頭或響應(yīng)頭字段不是駝峰的?

答: 從規(guī)范上講,HTTP 請求頭和響應(yīng)頭字段都應(yīng)該是駝峰的。但現(xiàn)實是殘酷的,不是每個 HTTP 服務(wù)端或客戶端程序都嚴(yán)格遵循規(guī)范,所以 NodeJS 在處理從別的客戶端或服務(wù)端收到的頭字段時,都統(tǒng)一地轉(zhuǎn)換為了小寫字母格式,以便開發(fā)者能使用統(tǒng)一的方式來訪問頭字段,例如 headers['content-length']。

問: 為什么 http 模塊創(chuàng)建的 HTTP 服務(wù)器返回的響應(yīng)是 chunked 傳輸方式的?

答: 因為默認(rèn)情況下,使用.writeHead方法寫入響應(yīng)頭后,允許使用.write方法寫入任意長度的響應(yīng)體數(shù)據(jù),并使用.end方法結(jié)束一個響應(yīng)。由于響應(yīng)體數(shù)據(jù)長度不確定,因此 NodeJS 自動在響應(yīng)頭里添加了 Transfer-Encoding: chunked 字段,并采用 chunked 傳輸方式。但是當(dāng)響應(yīng)體數(shù)據(jù)長度確定時,可使用.writeHead方法在響應(yīng)頭里加上 Content-Length 字段,這樣做之后 NodeJS 就不會自動添加 Transfer-Encoding 字段和使用 chunked 傳輸方式。

問: 為什么使用 http 模塊發(fā)起 HTTP 客戶端請求時,有時候會發(fā)生 socket hang up 錯誤?

答: 發(fā)起客戶端 HTTP 請求前需要先創(chuàng)建一個客戶端。http 模塊提供了一個全局客戶端 http.globalAgent,可以讓我們使用.request.get方法時不用手動創(chuàng)建客戶端。但是全局客戶端默認(rèn)只允許 5 個并發(fā) Socket 連接,當(dāng)某一個時刻 HTTP 客戶端請求創(chuàng)建過多,超過這個數(shù)字時,就會發(fā)生 socket hang up 錯誤。解決方法也很簡單,通過 http.globalAgent.maxSockets 屬性把這個數(shù)字改大些即可。另外,https 模塊遇到這個問題時也一樣通過 https.globalAgent.maxSockets 屬性來處理。

上一篇:小結(jié)下一篇:命令行程序