node.js详解Http服务器
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                node.js详解Http服务器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            概念:Node.js提供了http模塊。其中封裝了一個高效的HTTP服務器和一個建議的HTTP客戶端。
 
???http.server是一個基于事件的HTTP服務器。內部有C++實現。接口由JavaScript封裝。
 
????????????http.request則是一個HTTP客戶端工具。用戶向服務器發送請求。
 
 
代碼分析: http.createServer創建了一個http.Server的實例,將一個函數作為HTTP請求處理函數。這個函數接受兩個參數,請求對象req和相應對象的res。res顯式寫入了響應代碼200(表示請求成功),指定相應頭,寫入響應體。調用end結束并發送。該實例調用listen函數,啟動服務器并監聽3000端口。
 
 
 
 
 
 
 
 
 
                        
                        
                        一、HTTP服務器
http.Server實現的,它提供了一套封裝級別很低的API,僅僅是流控制和簡單的解析,所有的高層功能都需要通過它的接口 app.js案例 //引入模塊 var http=require('http') //創建服務 var server=http.createServer(function(req,res){//相當于action都在這里定義//響應頭res.writeHead(200,{'Content-Type':'text/html'});//相應內容res.write('<h1>Node.js</h1>');//結束響應res.end('<p>PCAT</p>'); //監聽端口 }) server.listen(3000); server.on('close',function(){console.log('server is close'); }) console.log('HTTP server is listening at port 3000.');代碼分析: http.createServer創建了一個http.Server的實例,將一個函數作為HTTP請求處理函數。這個函數接受兩個參數,請求對象req和相應對象的res。res顯式寫入了響應代碼200(表示請求成功),指定相應頭,寫入響應體。調用end結束并發送。該實例調用listen函數,啟動服務器并監聽3000端口。
???????????1.http.Server的事件
http.Server是一個基于事件的HTTP服務器,所有請求都被封裝到獨立的事件,開發者只要對它的事件編寫相應函數可實現HTTP服務器的所有功能,它繼承與EventEmitter,提供了以下事件: ???request:當客戶端請求到來時,該事件被觸發,提供兩個參數req和res,分別是http.ServerRequest和http.ServerResponse的實例,表示請求和響應信息。 connection:當TCP連接建立時,該事件被觸發,提供一個參數socket,為net.Socket的實例(底層協議對象)。 close:當服務器關閉時,該事件被觸發。 除此之外還有checkContinue、upgrade、clientError事件。 最常用和關心的是:request事件,http提供了一個捷徑,http.createServer([requestListener]) 顯式實現方法: 案例:server.js var http=require('http'); var server=new http.Server(); server.on('request',function(req,res){res.writeHead(200,{'Content-Type':'text/html'});res.write('<h1>we are pcat</h1>');res.end("<p>I'm marico.</p>"); }); server.listen(3000);????????????2.http.ServerRequest請求的信息
此對象是后端開發者最關注的內容,它一般由http.Server的request事件發送,作為第一個參數傳遞,通常簡寫成request或req。 HTTP請求分為兩部分:請求頭和請求體。,請求內容短的直接在請求頭解析完成后立即讀取,而請求體可能相對較長,需要一定的時間傳輸,因此提供了3個事件用于控制請求體傳輸。 ???(1)data:當請求體數據到來時,該事件被觸發,該事件一共一個參數chunk,表示接受到的數據。 ????????????????(2)end:當請求體數據傳輸完成時,該事件被觸發,此后將不會再有數據到來。 (3)close:用戶當前請求結束時,該事件被觸發,不同于end,如果用戶強制終止了傳輸,也會觸發close ServerReuqest的屬性 complete:客戶端請求是否已經發送完成 httpVersion??? HTTP協議版本,通常是1.0或1.1 method??????? HTTP請求方法,如:GET,POST url????????????????原始的請求路徑,例如/pc/getUser或/user?name=marico headers?????? HTTP請求頭 trailers???????HTTP請求尾(不常見) connection??????????????當前HTTP連接套接字,為net.Socket的實例 socket???????????????????connection屬性的別名 client????????????client屬性的別名????????????3.獲取GET請求內容
由于GET請求直接被嵌入在路徑中,URL完整的請求路徑,包括了?后面的部分,因此你可以手動解析后面的內容作為GET的參數,Nodejs的url模塊中的parse函數提供了這個功能 案例:get.js //引入模塊 var http=require('http'); var urls=require('url'); var util=require('util'); //創建服務 http.createServer(function(req,res){res.writeHead(200,{'Content-Type':'text/plain'});//解析并打成字符串形式返回給客戶端res.end(util.inspect(urls.parse(req.url,true))); }).listen(3000);?????????????4.獲取POST請求內容
POST請求的內容全部都在請求體中,http.ServerRequest并沒有一個屬性內容為請求體,原因是等待請求體傳輸可能是一件耗時的工作。譬如上傳文件。惡意的POST請求會大大消耗服務器的資源。所以Nodejs是不會解析請求體,當你需要的時候,需要手動來做。 post.js var http=require('http'); var querystring=require('querystring'); var util=require('util'); http.createServer(function(req,res){var post='技術共享CSDN';//注冊data事件監聽函數,每當接受請求體的數據req.on('data',function(chunk){post+=chunk;});req.on('end',function(){//解析成真正的post為真正的post請求格式//相當于Ext.decode()post=querystring.parse(post);//向前端返回res.end(util.inspect(post));}); }).listen(3000);??????????????5.http.ServerResponse返回給客戶端的信息
決定了用戶最終能到的結果,它是由http.Server的request事件發送的,作為第二個參數傳遞。一般為response或res 主要的三個函數: response.writeHead(statusCode,[headers]):向請求的客戶端發送響應頭。 statusCode是HTTP的狀態碼,如200為成功,404未找到等。 headers是一個類似關聯數組的對象,表示響應頭的每個屬性。 response.write(data,[encoding]) 向請求客戶端發送相應內容,data是buffer或字符串,encoding為編碼 response.end([data],[encoding]) 結束響應,告知用戶所有發送已經完成,當所有要返回的內容發送完畢,該函數必須被調用一次,如果不調用,客戶端永遠處于等待狀態總結
以上是生活随笔為你收集整理的node.js详解Http服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 使自己的注意力集中方法
- 下一篇: 纸牌三角形(蓝桥杯)
