《NodeJS開(kāi)發(fā)教程11-Http與Https使用》

使用nodejs不僅可以開(kāi)發(fā)http落君、https服務(wù)器额各,而且還可以開(kāi)發(fā)具有訪問(wèn)網(wǎng)絡(luò)能力的客戶端褥芒,下面我貼出具體實(shí)現(xiàn)步驟垃喊。

Http的使用

  • http服務(wù)器
/*http & https*/

var http=require("http");
var https=require("https");
var url=require("url");
var fs=require("fs");
var querystring=require("querystring");

//http-server端
var server=http.createServer(function(req,res)
{
    //獲取請(qǐng)求的pathname
    var pathname=url.parse(req.url).pathname;
    console.log("pathname:"+pathname);

    var body="";//post正文內(nèi)容體
    req.on("data",function(chunk)//監(jiān)聽(tīng)讀取數(shù)據(jù)事件
    {
        body+=chunk;
    });
    req.on("end",function()
    {
        res.writeHead(200,{"Content-Type":"text/plain"});//寫(xiě)入head參數(shù)

        if(req.method=="GET")
        {
            //查詢參數(shù)(獲取到客戶端請(qǐng)求的參數(shù))
            var query=querystring.parse(url.parse(req.url).query);
            console.log("query:%j",query);
            res.end("hello-server-get");
        }else if(req.method=="POST")
        {
            //查詢參數(shù)(獲取到客戶端請(qǐng)求的參數(shù))
            var query=querystring.parse(body);
            console.log("query:%j",query);
            res.end("hello-server-post");
        }
    });

});
server.listen(1336,"localhost");
console.log("服務(wù)器啟動(dòng)監(jiān)聽(tīng)localhost:1336");

創(chuàng)建http服務(wù)器猾普,并處理 GET和POST請(qǐng)求,拿到請(qǐng)求的路徑和參數(shù)本谜,返回結(jié)果到客戶端初家。

  • http客戶端
var http=require("http");
var https=require("https");
var fs=require("fs");
var querystring=require("querystring");

var options={
    hostname:"localhost",
    port:1336,
    path:"/info/child?abc=123&name=China",
    // method:"GET"
    method:"POST"
};
//post內(nèi)容
var contents=querystring.stringify({
    name:"中國(guó)",
    abc:123,
});
//構(gòu)造http請(qǐng)求(客戶端)
var req=http.request(options,function(res)
{
    console.log("STATUS:"+res.statusCode);//服務(wù)器返回的狀態(tài)碼
    console.log("HEADERS:%j",res.headers);//服務(wù)器返回的響應(yīng)頭參數(shù)
    res.setEncoding("utf8");
    res.on("data",function(chunk)//服務(wù)器返回的數(shù)據(jù)
    {
        console.log("response:"+chunk);
    });
});
req.write(contents);//post發(fā)送數(shù)據(jù)
req.end();//發(fā)送請(qǐng)求

Https使用

https服務(wù)器的創(chuàng)建,首先需要用到兩個(gè)文件(用于前后端數(shù)據(jù)傳輸時(shí)的加密):

 "certificate.pem"  //證書(shū)文件
 "privatekey.pem" //私鑰文件
  • 秘鑰和證書(shū)文件生成【如果你已經(jīng)有證書(shū)則可以跳過(guò)此步驟】
    打開(kāi)你的終端丛肮,【要確保安裝了openssl另锋,安裝教程百度一下吧】依次執(zhí)行以下三條命令,最終會(huì)生成三個(gè)文件锨亏,分別是:
    privatekey.pem
    certrequest.csr
    certificate.pem
/**
 * ssl證書(shū)生成
 * 1.執(zhí)行 openssl genrsa -out privatekey.pem 1024 【生成privatekey.pem私鑰】
 * 2.執(zhí)行 openssl req -new -key privatekey.pem -out certrequest.csr 【生成certrequest.csr簽名】
 * 3.執(zhí)行 openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem 【生成certificate.pem簽名證書(shū)】
 */
  • https服務(wù)器
    有了我們需要的
    "certificate.pem" //證書(shū)文件
    "privatekey.pem" //私鑰文件
    我們就可以創(chuàng)建并啟動(dòng)一個(gè)https服務(wù)器了:
var http=require("http");
var https=require("https");
var url=require("url");
var fs=require("fs");
var querystring=require("querystring");

var options={
    key: fs.readFileSync('./privatekey.pem'),
    cert: fs.readFileSync('./certificate.pem'),
    passphrase:"****"http://你的密碼
};
var server=https.createServer(options,function(req,res)
{
    var pathname=url.parse(req.url).pathname;
    console.log("pathname:"+pathname);
    res.writeHead(200,{"Content-Type":"text/plain"});
    res.end("hello-server");
});
server.listen(443,"localhost");
console.log("服務(wù)器監(jiān)聽(tīng)localhost:443");

  • https客戶端
    【注意】以下代碼會(huì)報(bào) "Error: self signed certificate"錯(cuò)誤炕泳,應(yīng)該證書(shū)是我們自己簽發(fā)的纵诞,是證書(shū)校驗(yàn)失敗導(dǎo)致(如果自簽名證書(shū)沒(méi)問(wèn)題可以噴我)正常情況下 我們發(fā)布版本需要到權(quán)威的SSL/TLS證書(shū)簽發(fā)機(jī)構(gòu)進(jìn)行簽發(fā)。
    不過(guò) 你可以通過(guò)瀏覽器去驗(yàn)證一下你的https服務(wù)器是否正常啟動(dòng)并運(yùn)行培遵。
    https://localhost:443/
var options={
    hostname:"localhost",
    port:443,
    path:"/info?abc=123&name=China",
    method:"GET"
};
options.agent = new https.Agent(options);
//構(gòu)造https請(qǐng)求(客戶端)【自簽名證書(shū)非法浙芙,應(yīng)該使用正式正式】
var req=https.request(options,function(res)
{
    console.log("STATUS:"+res.statusCode);
    console.log("HEADERS:%j",res.headers);
    res.setEncoding("utf8");
    res.on("data",function(chunk)
    {
        console.log("response:"+chunk);
    });
});
req.end();//發(fā)送請(qǐng)求
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市籽腕,隨后出現(xiàn)的幾起案子嗡呼,更是在濱河造成了極大的恐慌,老刑警劉巖皇耗,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件南窗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡郎楼,警方通過(guò)查閱死者的電腦和手機(jī)万伤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呜袁,“玉大人敌买,你說(shuō)我怎么就攤上這事〗捉纾” “怎么了虹钮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)膘融。 經(jīng)常有香客問(wèn)我芙粱,道長(zhǎng),這世上最難降的妖魔是什么氧映? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任春畔,我火速辦了婚禮,結(jié)果婚禮上屯耸,老公的妹妹穿的比我還像新娘拐迁。我一直安慰自己,他們只是感情好疗绣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布线召。 她就那樣靜靜地躺著,像睡著了一般多矮。 火紅的嫁衣襯著肌膚如雪缓淹。 梳的紋絲不亂的頭發(fā)上哈打,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音讯壶,去河邊找鬼料仗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伏蚊,可吹牛的內(nèi)容都是我干的立轧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼躏吊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼氛改!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起比伏,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胜卤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后赁项,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體葛躏,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年悠菜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舰攒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡李剖,死狀恐怖芒率,靈堂內(nèi)的尸體忽然破棺而出囤耳,到底是詐尸還是另有隱情篙顺,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布充择,位于F島的核電站德玫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏椎麦。R本人自食惡果不足惜宰僧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望观挎。 院中可真熱鬧琴儿,春花似錦、人聲如沸嘁捷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雄嚣。三九已至晒屎,卻和暖如春喘蟆,著一層夾襖步出監(jiān)牢的瞬間鼓鲁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工橙弱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膘螟,地道東北人荆残。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓内斯,卻偏偏與公主長(zhǎng)得像像啼,于是被迫代替她去往敵國(guó)和親忽冻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本文摘自 騰訊bugly 的文章《全站 HTTPS 來(lái)了》袱衷,內(nèi)容有修改致燥。 大家在使用百度怖侦、谷歌或淘寶的時(shí)候,是否注...
    bnotes閱讀 3,651評(píng)論 1 9
  • HTTPS介紹 超文本傳輸安全協(xié)議(英語(yǔ):Hypertext Transfer Protocol Secure荷腊,縮...
    齊滇大圣閱讀 8,927評(píng)論 8 96
  • CA和證書(shū)安全協(xié)議(SSL/TLS)OpenSSH 一、CA和證書(shū) (一) PKI(Public Key Infr...
    哈嘍別樣閱讀 1,391評(píng)論 0 0
  • 窗口 文:楊慶瑞 1 遠(yuǎn)望高樓入云層,?天色靜穆綠波平一罩。往來(lái)渡船有斷續(xù)撇簿,前后游人無(wú)消停四瘫。水窄猶能連世界找蜜,云低哪能遮...
    楊慶瑞閱讀 491評(píng)論 0 2
  • 在開(kāi)學(xué)不久的一個(gè)下午洗做,老師突然地布置了朗誦這個(gè)特殊的作業(yè),讓我有點(diǎn)手足無(wú)措竭望。我是很好勝的邪码,我不喜歡別人輕易...
    冬也有溫暖閱讀 160評(píng)論 0 1