2019-10-28HTTP協(xié)議

1.1HTTP協(xié)議的概念

客戶端和服務(wù)器端溝通的規(guī)范:

為什么要有這個(gè)規(guī)范目派?

答:網(wǎng)站應(yīng)用在運(yùn)行的過程中憾股,服務(wù)器端需要知道客戶端請求了什么,客戶端知道服務(wù)器端響應(yīng)了什么庵佣,不能雞同鴨講。需要一個(gè)雙方都能聽懂的語言汛兜。

HTTP協(xié)議:超文本傳輸協(xié)議巴粪,規(guī)定了如何從網(wǎng)站服務(wù)器傳輸超文本到本地瀏覽器,它基于客戶端服務(wù)器架構(gòu)工作粥谬,是客戶端(用戶)和服務(wù)器端(網(wǎng)站)請求和應(yīng)答的標(biāo)準(zhǔn)肛根。

1.2報(bào)文

客戶端和服務(wù)器端在進(jìn)行請求和響應(yīng)過程中,所攜帶的數(shù)據(jù)塊漏策,倆者對話的說明以及內(nèi)容派哲。

報(bào)文:請求報(bào)文、響應(yīng)報(bào)文

請求報(bào)文:客戶端向服務(wù)器端發(fā)送請求所攜帶的數(shù)據(jù)塊(客戶端對服務(wù)器所說的話)

響應(yīng)報(bào)文:服務(wù)器端對客戶端進(jìn)行響應(yīng)所攜帶的數(shù)據(jù)塊(服務(wù)器對客戶端說的話)

數(shù)據(jù)塊:包含了請求和響應(yīng)的相關(guān)信息掺喻,比如用戶在登錄時(shí)輸入的用戶名和密碼被包含在請求數(shù)據(jù)塊中進(jìn)行傳遞的芭届。當(dāng)前登錄時(shí)成功還是失敗就包含在響應(yīng)數(shù)據(jù)塊中储矩。

報(bào)文在傳輸過程中。遵循規(guī)定的格式喉脖,以? ?:進(jìn)行分割的鍵值對

在哪能看到報(bào)文信息椰苟?

借助瀏覽器提供的開發(fā)者工具:Network,刷新瀏覽器

顯示:search.html

search.jpg

favicon.ico

隨便打開一個(gè)請求search.html(點(diǎn)擊)

在右側(cè)出現(xiàn)Headers Preview Response Cookies Timing

點(diǎn)擊Headers?

顯示:General? ? ? ? ? ? ? ? ? ? ? // 顯示比較重要的信息树叽,核心的信息

Response Headers(7)? ? ? ? ?// 響應(yīng)報(bào)文(服務(wù)器端對客戶端)

Request Headers(11)? ? ? ? ?// 請求報(bào)文(客戶端對服務(wù)器端)

打開Request Headers(11)?

顯示: Accept:? ? ? ? ? ? ? ? ? ? ? ? ? // 接收(告訴服務(wù)器端當(dāng)前客戶端能接收html文件舆蝴,圖片以及一些其他文件)

點(diǎn)擊Response

顯示的服務(wù)器端響應(yīng)給客戶端具體的內(nèi)容

1.3請求報(bào)文

①請求方式:GET 請求數(shù)據(jù)、POST 發(fā)送數(shù)據(jù)

PS:請求方式就是一種標(biāo)識题诵,告訴服務(wù)器端當(dāng)前這次請求要做的這個(gè)事情的類型洁仗,比如說獲取數(shù)據(jù)的請求(一般都用GET),如果是添加數(shù)據(jù)的請求(就要POST)性锭,如果都不是赠潦,而是網(wǎng)站中的一般邏輯,比如登入操作(也用POST)

PS:POST這種方式相對GET要安全一些草冈。

客戶端如何向服務(wù)器端發(fā)送get或者post請求呢她奥?

最常見的get請求,就是通過瀏覽器中的地址通過輸入網(wǎng)址的方式怎棱,如何證明哩俭?

服務(wù)器端能獲取客戶端請求方式。

req:就是請求對象拳恋,它包含了請求相關(guān)的信息凡资,其中就包含了請求方式。

如何獲取請求方式谬运?

req.method

app.js中? console.log(req.method);

打開網(wǎng)站:localhost:3000

命令行窗口:有請求方式輸出GET

疑惑:為什么有2個(gè)GET輸出隙赁?1個(gè)是輸入localhost請求,1個(gè)是瀏覽器自帶圖標(biāo)請求

如何發(fā)送post請求梆暖?

在server文件夾下新建form.html文件伞访,并生成html頭

<!--

method:指定當(dāng)前表達(dá)提交的方式

action:指定當(dāng)前表達(dá)提交的地址

-- >

<form method="post" action="http://loaclhost:3000">

<input type="submit" name="">

</form>

在瀏覽器中打開這個(gè)頁面,命令行窗口就有post請求

證明了提交的表達(dá)確實(shí)是post請求轰驳。

疑惑:在post請求后為什么會(huì)有GET請求厚掷,在POST請求發(fā)送完后,表單發(fā)生了一個(gè)默認(rèn)行為滑废,其實(shí)就是表單的一個(gè)跳轉(zhuǎn)行為(表單的跳轉(zhuǎn)行為默認(rèn)是一個(gè)GET方式)

服務(wù)器拿到GET請求蝗肪,POST請求有什么用?

答:如果請求的地址是相同的蠕趁,那么請求的方式是不同的薛闪,那根據(jù)這個(gè)請求的方式,響應(yīng)不同的內(nèi)容

app.js中

if(req.method == 'POST'){

? ? ? ?res.end('post')

}else if(req.method == 'GET'){

? ? ? ?res.end('get')

}

?// res.end('<h2>hi,user</h2>');

瀏覽器打開localhost3000

得到get

瀏覽器打開form.html,提交表單(提交到了localhost:3000這個(gè)地址)

得到post

切換到瀏覽器中:輸入localhost:3000/index

返回:get

切換到瀏覽器中:輸入localhost:3000/list

返回:get

此時(shí)客戶端無論訪問什么地址俺陋,返回的都是相同的內(nèi)容豁延。怎么訪問不同的內(nèi)容呢?

怎么能訪問index,返回首頁內(nèi)容呢昙篙?如果用戶訪問的地址不存在,返回頁面沒有找到诱咏,這個(gè)需求怎么實(shí)現(xiàn)苔可?

答:服務(wù)器端要獲取到客戶端的請求地址,

req.url? ?// 獲取請求地址

切換到編輯器中

app.js中

console.log(req.url)袋狞;

切換到瀏覽器中焚辅,訪問/index

切換到命令行窗口

顯示/index

if(req.url == '/index'){

? ? ? ? ?res.end('welcome to homepage');

}else if(req.url=='/list'){

? ? ? ? ?res.end*('wekcome to listpage');

}else{

? ? ? ? res.end('not found');

}

回到瀏覽器中:訪問/index

顯示:welcome to homepage

回到瀏覽器中:訪問/list

顯示:welcome to listpage

回到瀏覽器中:訪問/xxxxx

顯示:not found

回到瀏覽器中:訪問(不輸入)

顯示:not found

回到命令行工具窗口:

顯示:/

如果什么也不寫,想訪問到首頁

if(req.url == '/index' || req.url =='/'){

?? ?res.end('welcome to homepage');

}else if(req.url=='/list'){

?? ? ?res.end*('wekcome to listpage');

}else{

?? res.end('not found');

}

驗(yàn)證:成功

req.headers? ?// 請求報(bào)文信息

app.js

console.log(req.headers);

切換到瀏覽器中苟鸯,刷新頁面

切換到命令行窗口:有2個(gè)對象輸出

獲取報(bào)文信息里具體的某一項(xiàng)

app.js

console.log(req.headers['accept']);

刷新頁面同蜻,切換到命令行窗口,得到該項(xiàng)信息

3.4響應(yīng)報(bào)文

1.HTTP狀態(tài)碼

·200請求chg

·404請求的資源沒有找到

·500服務(wù)器端錯(cuò)誤

·400客戶端請求有語法錯(cuò)誤

PS:默認(rèn)情況下服務(wù)器端沒有返回狀態(tài)碼早处,就是成功的湾蔓,沒有問題的。

CSS文件砌梆,圖片文件沒有找到:返回404錯(cuò)誤默责,明確告訴這個(gè)資源沒有找到,在瀏覽器的控制臺(tái)中也會(huì)報(bào)一個(gè)紅色的錯(cuò)誤咸包。

500錯(cuò)誤和客戶端一般沒有什么關(guān)系桃序,服務(wù)器端在運(yùn)行時(shí)哪個(gè)一個(gè)地方的代碼報(bào)錯(cuò)了,就會(huì)返回一個(gè)500的錯(cuò)誤诉儒,告訴客戶端服務(wù)器出現(xiàn)了問題葡缰。

400錯(cuò)誤代表客戶端的請求語法有問題亏掀,比如說請求路徑寫錯(cuò)了或者說請求參數(shù)不匹配忱反,都可以返回400錯(cuò)誤。

在瀏覽器的開發(fā)者工具中能夠看到:Network第二項(xiàng)Status

=============================================

嘗試在服務(wù)器端為客戶端設(shè)置不同的狀態(tài)碼

切換代碼編輯器中:

res.wirteHead();

res.wirteHead(500);

res.wirteHead(400);?

PS:HTTP狀態(tài)碼就是一種標(biāo)識滤愕,在返回時(shí)要把狀態(tài)碼設(shè)置成多少温算,完全取決于當(dāng)前的警告。

2.內(nèi)容類型

內(nèi)容類型設(shè)置

·text/html

·text/css

·application/javascript? ? ? ? ? ? ? ? ? ?// 返回javascript文件

·image/jpeg

·application/json

·text/plain? ? ? ? ? ? ?// 默認(rèn)

在writeHead()方法中间影,除了第一個(gè)參數(shù)狀態(tài)碼以外注竿,它還有第二個(gè)參數(shù),是一個(gè)對象(寫的是響應(yīng)頭里的信息(響應(yīng)報(bào)文的信息'content-type':text/plain))(PS:此處代表純文本魂贬,不指定巩割,默認(rèn)是純文本)

重點(diǎn):通過設(shè)置res:writeHead(200,{

? ? ? ? ? ? 'content-type':'text/html'

});

使res.end('<h2>ni hao</h2>');輸出ni hao

警告:里面是中文會(huì)出現(xiàn)亂碼!8对铩宣谈!在做網(wǎng)頁開發(fā)時(shí)一般編碼都是utf-8,這個(gè)時(shí)候我們需要把這個(gè)編碼指定键科。

res:writeHead(200,{

? ? ? ? ? ? 'content-type':'text/html闻丑;charset=utf-8'

});

回到瀏覽器中漩怎,亂碼問題被解決。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗦嗡,一起剝皮案震驚了整個(gè)濱河市勋锤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侥祭,老刑警劉巖叁执,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矮冬,居然都是意外死亡徒恋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門欢伏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來入挣,“玉大人,你說我怎么就攤上這事硝拧【斗ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵障陶,是天一觀的道長滋恬。 經(jīng)常有香客問我,道長抱究,這世上最難降的妖魔是什么恢氯? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮鼓寺,結(jié)果婚禮上勋拟,老公的妹妹穿的比我還像新娘。我一直安慰自己妈候,他們只是感情好敢靡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苦银,像睡著了一般啸胧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幔虏,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天纺念,我揣著相機(jī)與錄音,去河邊找鬼想括。 笑死陷谱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的主胧。 我是一名探鬼主播叭首,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼习勤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了焙格?” 一聲冷哼從身側(cè)響起图毕,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎眷唉,沒想到半個(gè)月后予颤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冬阳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年蛤虐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肝陪。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驳庭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氯窍,到底是詐尸還是另有隱情饲常,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布狼讨,位于F島的核電站贝淤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏政供。R本人自食惡果不足惜播聪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望布隔。 院中可真熱鬧离陶,春花似錦、人聲如沸执泰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽术吝。三九已至,卻和暖如春茸苇,著一層夾襖步出監(jiān)牢的瞬間排苍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工学密, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淘衙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓腻暮,卻偏偏與公主長得像彤守,于是被迫代替她去往敵國和親毯侦。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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