Nodejs的http模組

來源:互聯網
上載者:User

標籤:class   http伺服器   win   串連   16px   ext   bsp   version   自動產生   

一、http伺服器
    我們知道傳統的HTTP伺服器是由Aphche、Nginx、IIS之類的軟體來搭建的,但是Nodejs並不需要,Nodejs提供了http模組,自身就可以用來構建伺服器,例如:

var http = require("http");http.createServer(function(req,res) {    res.writeHead(200,{        "content-type":"text/plain"    });    res.write("Hello NodeJs");    res.end();}).listen(3000);

http模組中封裝了一個HTTP伺服器和一個簡易的HTTP用戶端:http.Server()用於建立是一個基於事件的HTTP伺服器,而http.request()和http.get()可以作為用戶端向HTTP伺服器發起請求。在這裡使用的createServer()方法返回了一個http.Server對象,text/plain的意思是將檔案設定為純文字格式,瀏覽器在擷取到這種檔案時並不會對其進行處理,如果將content-type設定為text/html,瀏覽器在擷取到這種檔案時會自動調用HTML的解析器對檔案進行相應的處理。另外,也可以用new http.Server()建構函式的方法建立http.Server對象,例如:

var http = require("http");var server = new http.Server();server.on("request",function(req,res) {    ...}).listen(3000);

以上代碼是通過直接建立一個http.Server對象,然後為其添加request事件監聽。使用createServer()方法建立的http.Server對象預設添加了一個request事件監聽,但是省略了。
上面說到了http.Server的事件,http.Server最常用的事件是"request",當接收到http請求時觸發。在"request"事件中,傳入回呼函數的參數req和res分別是http.IncomingMessage和http.ServerResponse的執行個體:

http.IncomingMessage類包含了從用戶端發來的http請求資訊,它可以用來訪問響應狀態、訊息頭、以及資料等,例如:
*headers/<object> - 要求標頭或回應標頭的對象
*httpVersion/<string> - http協議版本,可能的值有"1.1"或"1.0"
*method/<string> - 請求的方法,例如"GET"、"POST"等
*statusCode/<number> - http響應狀態代碼
*statusMessage/<string> - http響應狀態訊息
*url/<string> - 發送http請求的用戶端的url

http.ServerResponse類是返回給用戶端的資訊,它有三個重要的方法,用於返迴響應頭、響應內容以及結束請求:
writeHead(statusCode[, statusMessage][,headers]):向請求的用戶端發送回應標頭,該函數在一個請求中最多調用一次,如果不調用,則會
自動產生一個回應標頭
write(chunk[,encoding][,callback]):向請求的用戶端發送響應內容,chunk是一個buffer或者字串,如果chunk是字串,則需要指定編
碼方式,預設為utf-8,在end()方法調用之前可以多次調用
end([data][,encoding][,callback]):結束響應,告知用戶端所有發送已經結束,如果不調用這個函數,用戶端將一直處於等待狀態

其他http.Server類的事件可以參考官方文檔:http://nodejs.cn/api/http.html

二、http用戶端

http模組提供了http.request()和http.get()兩個方法,功能是作為用戶端向http伺服器發起請求。

http.request(options[,callback])方法
http.request()方法返回一個http.ClientRequest的執行個體。其中,options是一個對象,表示請求的參數。包括:
*protocol/<string> - 使用的協議,預設為http
*host/<string> - 請求發送至的伺服器的網域名稱或 IP 位址,預設為"localhost"
*hostname/<string> - host的別名
*port/<number> - 遠程伺服器的連接埠號碼,預設為80
*method/<string> - 指定http要求方法,預設為"GET"
*path/<string> - 請求相對於根的路徑,預設是"/",QueryString應該包含在其中。例如:/index.html?page=12
*headers/<object> - 包含要求標頭的對象
*timeout/<number> - 它設定了 socket 等待串連的逾時時間

例如:

var http = require("http");var querystring = require("querystring");var postData = querystring.stringify({    "content":"測試一下",    "mid":8837});var options = {    hostname:"www.imooc.com",    port:80,    path:"/course/document",    method:"POST",    headers:{        "Accept":"application/json, text/javascript, */*; q=0.01",        "Accept-Encoding":"gzip, deflate",        "Accept-Language":"zh-CN,zh;q=0.8",        "Connection":"keep-alive",        "Content-Length":postData.length,        "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",        "Cookie":"",        "Host":"www.imooc.com",        "Origin":"http://www.imooc.com",        "Referer":"http://www.imooc.com/video/8837",        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2763.0 Safari/537.36",        "X-Requested-With":"XMLHttpRequest",    }}var req = http.request(options,function(res){    res.on("data",function(chunk){        console.log(chunk);    });    res.on("end",function(){        console.log("完畢!");    });    console.log(res.statusCode);});req.on("error",function(err){    console.log(err.message);})req.write(postData);req.end();

如果請求過程中遇到任何錯誤,則在返回的請求對象中會觸發"error"事件;
使用http.request()必須總是調用req.end()來表明請求的結束,即使沒有資料被寫入主體

http.get(options[,callback])方法
http.get()方法是http.request()方法的簡化版,主要區別是http.get()自動將要求方法設為了"GET"請求,同時不需要手動調用req.end()

Nodejs的http模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.