Web開(kāi)發(fā)學(xué)習(xí)筆記——HTTP概述

接著了解HTTP的一些基本知識(shí)奔缠。

什么是HTTP

如果說(shuō)TCP/IP是一套約定計(jì)算機(jī)如何交流通信的規(guī)則的話嘱么,HTTP起初設(shè)計(jì)的初衷則是約定客戶端(Client,也就是瀏覽器)和主機(jī)(Host孵班,也就是服務(wù)器)之間的通信規(guī)則鄙漏,當(dāng)然,現(xiàn)在腹鹉,它不止是這個(gè)功能咯藏畅!

那么,如何給HTTP下一個(gè)定義呢功咒?HTTP,全稱是HyperText Transfer Protocol愉阎,翻譯過(guò)來(lái)就是超文本傳輸協(xié)議绞蹦,它是一種在client-server之間,用于傳輸超媒體文檔的榜旦、無(wú)狀態(tài) 的應(yīng)用層協(xié)議坦辟。所謂的超媒體文檔,指的就是HTML等超文本文件以及Web中的文本章办、圖片锉走、視頻、腳本和樣式等藕届。而無(wú)狀態(tài)挪蹭,則意味著它不能夠保存數(shù)據(jù),這在電商網(wǎng)站的購(gòu)物車功能中表現(xiàn)最明顯休偶,如果我們從一個(gè)頁(yè)面向購(gòu)物車添加了一件商品梁厉,在換一個(gè)頁(yè)面后,這件商品并不會(huì)實(shí)時(shí)更新踏兜,這個(gè)問(wèn)題如何解決呢词顾?——解決辦法當(dāng)然是有的,就是通過(guò)HTTP cookies碱妆,把商品信息添加cookies到HTTP頭部肉盹,創(chuàng)建一個(gè)會(huì)話共享這個(gè)信息。HTTP請(qǐng)求(request)從client端(瀏覽器)發(fā)出疹尾,到server端(服務(wù)器)的指定端口(默認(rèn)80端口)上忍,服務(wù)器端接受到請(qǐng)求后,根據(jù)請(qǐng)求頭部信息纳本,做出響應(yīng)(response)窍蓝,返回一個(gè)響應(yīng)狀態(tài)和對(duì)應(yīng)的請(qǐng)求資源(文件、錯(cuò)誤信息之類的)繁成。HTTP位于七層協(xié)議的最上層應(yīng)用層吓笙。當(dāng)然,這整個(gè)過(guò)程并不只是客戶端和服務(wù)器兩個(gè)點(diǎn)的事情巾腕,期間還有路由器面睛、調(diào)節(jié)器等許多實(shí)體節(jié)點(diǎn)。

Http與Https

我們一直談到http祠墅,但是侮穿,當(dāng)你在瀏覽器中看到的URL中歌径,經(jīng)常會(huì)看到前面的協(xié)議名是https毁嗦,那么,http和https有什么關(guān)系呢回铛?(我想絕不是java和javascript的關(guān)系滴)狗准。

在查閱了一些資料之后克锣,我知道后面多余的s指的是secure,也就是說(shuō)后者是前者的安全版本腔长,那么為什么https會(huì)更安全呢袭祟?原來(lái),開(kāi)發(fā)https的主要目的是為了在網(wǎng)絡(luò)傳輸數(shù)據(jù)的過(guò)程中捞附,保證數(shù)據(jù)的隱私和完整性巾乳。它的主要設(shè)計(jì)思想是,通過(guò)在公開(kāi)的網(wǎng)絡(luò)通道上建立一條安全通道鸟召,并且通過(guò)使用一些安全證書(shū)和加密包的方式胆绊,對(duì)數(shù)據(jù)提供保護(hù)。所以欧募,會(huì)有一些專門(mén)的機(jī)構(gòu)(如VeriSign以及Microsoft等)負(fù)責(zé)頒發(fā)信任證書(shū)給網(wǎng)站压状,并且將這些信任協(xié)議預(yù)先安裝在瀏覽器中,所以說(shuō)跟继,這兩個(gè)機(jī)構(gòu)相當(dāng)于德高望重的值得被信賴的人种冬。我們進(jìn)入一個(gè)網(wǎng)站時(shí),在瀏覽器地址欄的一側(cè)舔糖,經(jīng)常會(huì)有一個(gè)鎖子娱两,這個(gè)鎖子就代表網(wǎng)站的是否安全,例如我們?cè)贑hrome中輸入百度的網(wǎng)址金吗,會(huì)看到左側(cè)綠色的鎖子和安全兩個(gè)字谷婆。在Firefox還可以看到它的安全證書(shū),長(zhǎng)這樣:


Firefox中的百度安全證書(shū)

可以看到證書(shū)的頒發(fā)機(jī)構(gòu)是Global Sign.

Https是通過(guò)叫做SSL/TLS技術(shù)來(lái)加密數(shù)據(jù)包辽聊,TLS纪挎,叫做傳輸層安全協(xié)議(Transport Layer Security),它的前身是SSL跟匆,叫做安全套接層(Secure Sockets Layer)异袄,其實(shí),Https歷史淵源很久了玛臂,這是1994年網(wǎng)景推出第一代瀏覽器網(wǎng)景導(dǎo)航者時(shí)提出的烤蜕,當(dāng)時(shí),它們就用SSL加密迹冤,后來(lái)IETF將這項(xiàng)技術(shù)標(biāo)準(zhǔn)化讽营,于1999年推出TLS。所以說(shuō)泡徙,Https的安全保障是建立在SSL/TLS的基礎(chǔ)上的橱鹏。

另外,Http和Https的一個(gè)區(qū)別是,前者使用80端口傳輸莉兰,而后者使用443端口挑围。

下面的內(nèi)容是在一次完整的HTTP請(qǐng)求中的過(guò)程以及相關(guān)概念。

  • 請(qǐng)求信息(報(bào)文)
  • 回應(yīng)信息(報(bào)文)
  • 請(qǐng)求方法(動(dòng)作)
  • 狀態(tài)碼(status code)

請(qǐng)求信息(報(bào)文)

請(qǐng)求信息是包含了一個(gè)HTTP請(qǐng)求的基本信息的報(bào)文糖荒,其一般包括請(qǐng)求方法(下面詳述)杉辙,資源路徑(一般指URL地址),HTTP協(xié)議版本號(hào)捶朵,Headers(主機(jī)名和一些告訴服務(wù)器處理信息的參數(shù)蜘矢,例如接收的語(yǔ)言之類的),在POST等請(qǐng)求方法中可以出現(xiàn)的Body信息综看,也就是發(fā)過(guò)去的資源硼端。可以在Chrome的開(kāi)發(fā)者工具的Network面板左側(cè)的Name子面板下點(diǎn)擊網(wǎng)址寓搬,然后在右側(cè)的Headers選項(xiàng)卡下查看請(qǐng)求信息珍昨。例如google.com的請(qǐng)求信息如下圖。

Request Headers

回應(yīng)信息(報(bào)文)

回應(yīng)信息是指server端接受到請(qǐng)求信息后句喷,經(jīng)過(guò)處理而返回的響應(yīng)信息镣典,和請(qǐng)求信息一樣,它同樣通過(guò)一個(gè)報(bào)文來(lái)實(shí)現(xiàn)唾琼,其主要內(nèi)容是:HTTP協(xié)議版本號(hào)兄春,狀態(tài)信息姚糊,Headers倘要,比請(qǐng)求更常見(jiàn)的返回內(nèi)容Body以及狀態(tài)碼,回應(yīng)信息與請(qǐng)求信息的最大不同是倦青,它會(huì)返回一個(gè)狀態(tài)碼和狀態(tài)信息祭饭,其它的差不多意思~其實(shí)狀態(tài)碼和狀態(tài)信息芜茵,是比較常見(jiàn)的。

狀態(tài)碼(Status Code)

HTTP狀態(tài)碼(英語(yǔ):HTTP Status Code)是用以表示網(wǎng)頁(yè)服務(wù)器HTTP響應(yīng)狀態(tài)的3位數(shù)字代碼倡蝙。它由 RFC 2616 規(guī)范定義的九串,并得到 RFC 2518、RFC 2817寺鸥、RFC 2295猪钮、RFC 2774 與 RFC 4918 等規(guī)范擴(kuò)展。 所有狀態(tài)碼的第一個(gè)數(shù)字代表了響應(yīng)的五種狀態(tài)之一胆建】镜停——來(lái)自維基百科.

那么,我們不禁要問(wèn)了笆载,這五個(gè)數(shù)字和它所對(duì)應(yīng)的五種狀態(tài)到底是什么呢扑馁?打個(gè)比方好了涯呻,這就像戀愛(ài)中的表白,假如一位男士寫(xiě)了一封極其浪漫的告白信向一個(gè)姑娘表白檐蚜,那么這封信就是HTTP請(qǐng)求了魄懂,而回信則是回應(yīng)信息沿侈,其中的內(nèi)容則是狀態(tài)碼了闯第,接下來(lái),我們來(lái)模擬一下缀拭,這位女士回復(fù)以下幾種數(shù)字打頭的信息咳短,對(duì)應(yīng)表白的成功與否。

  • 1XX蛛淋,以1打頭的狀態(tài)碼表示服務(wù)器已經(jīng)接受到請(qǐng)求咙好,需要繼續(xù)處理,這是一種臨時(shí)響應(yīng)狀態(tài)褐荷,這種狀態(tài)碼是不會(huì)發(fā)送到客戶端來(lái)的~也就是說(shuō)勾效,女方收到了信,她還沒(méi)看呢叛甫,她總不會(huì)回一封信說(shuō):你的信我收到了层宫,還沒(méi)拆!

  • 2XX其监,以2打頭的狀態(tài)碼代表請(qǐng)求已經(jīng)被接收萌腿,并且完全懂了什么意思并且接受了請(qǐng)求。也就是說(shuō)抖苦,如果男士收到的回信內(nèi)容是以2打頭的毁菱,那么恭喜,告白成功了锌历!

  • 3XX贮庞,以3打頭的狀態(tài)碼表示需要客戶端需要進(jìn)一步的操作才能完成請(qǐng)求也就是說(shuō),這位姑娘的意思是究西,你必須要在北京有一套房才能答應(yīng)你呢

  • 4XX贸伐,以4打頭的狀態(tài)碼表示客戶端發(fā)生錯(cuò)誤,妨礙了服務(wù)器的處理怔揩。這就糟糕了捉邢,你的表白信估計(jì)寫(xiě)的不大好,寫(xiě)了一大堆表?yè)P(yáng)另外一位姑娘的話商膊,所以伏伐,告白失敗晕拆!

  • 5XX藐翎,以5打頭的狀態(tài)表示服務(wù)器在處理的過(guò)程中由于某些原因發(fā)生了錯(cuò)誤材蹬,導(dǎo)致請(qǐng)求失敗。這回就是姑娘的問(wèn)題吝镣,這位姑娘大概已經(jīng)名花有主了堤器,所以,告白失斈┘帧闸溃!

一共有以上五大類狀態(tài)碼,其中我們最常見(jiàn)的狀態(tài)碼是200(請(qǐng)求成功拱撵,數(shù)據(jù)也將會(huì)返回)辉川,301(Moved permanently,資源被永久移動(dòng)到新位置了)拴测,401(當(dāng)前請(qǐng)求需要用戶驗(yàn)證)乓旗,404(請(qǐng)求失敗,所需的資源在服務(wù)器上沒(méi)找到)集索。

而狀態(tài)信息(State message)屿愚,則指的是服務(wù)器端根據(jù)狀態(tài)碼做出的描述性信息,這是可以自定義的务荆,例如我們常見(jiàn)的“404妆距,糟糕,你要找的頁(yè)面走丟了”之類的~

請(qǐng)求方法(動(dòng)作)

請(qǐng)求方法蛹含,也叫請(qǐng)求動(dòng)作毅厚,就是客戶端向服務(wù)器發(fā)送請(qǐng)求時(shí)所用的對(duì)話方式,因?yàn)榉椒ǖ牟煌窒洌懿扇〉牟僮饕泊蟠蟛煌ⅲ琀TTP請(qǐng)求方法一共有8種。

  1. GET.獲取相關(guān)資源酷窥,這是最常見(jiàn)的方法之一咽安,它只要求URL中包含請(qǐng)求資源的位置和服務(wù)器返回資源的必要信息。

  2. POST.向服務(wù)器提交數(shù)據(jù)蓬推,可能是添加新資源或修改已存在資源妆棒,要添加的信息包含在請(qǐng)求信息Headers中,這類方法常見(jiàn)情景有提交表單沸伏,上傳文件等糕珊。

  3. PUT.更新指定資源,上傳其最新版本毅糟,上傳的數(shù)據(jù)仍然會(huì)包含在請(qǐng)求信息Headers中红选。

  4. DELETE.刪除一個(gè)已存在的資源。

  5. HEAD.與PUT類似姆另,只不過(guò)它不會(huì)添加信息到請(qǐng)求信息中喇肋,所以經(jīng)常用于一些資源的檢驗(yàn)與驗(yàn)證工作坟乾。

  6. TRACE.經(jīng)常用于診斷工作。

  7. OPTIONS.這個(gè)方法可使服務(wù)器傳回該資源所支持的所有HTTP請(qǐng)求方法蝶防。

其中甚侣,前四種比較常用。

總結(jié)

本文通過(guò)了解HTTP的基本概念:一個(gè)在客戶端和服務(wù)器端交換超文本文件(當(dāng)然還有其他功能)的應(yīng)用層協(xié)議间学;

然后接著了解了在一次HTTP請(qǐng)求中會(huì)發(fā)生什么:客戶端發(fā)送一個(gè)請(qǐng)求信息(可能包括請(qǐng)求方法殷费,資源路徑,協(xié)議版本號(hào)菱鸥,Headers宗兼,請(qǐng)求Body等)躏鱼,請(qǐng)求信息通過(guò)路由器等中間層的幾微秒的漫長(zhǎng)旅程氮采,到達(dá)服務(wù)器(也可能到不了,301之類的你懂的)染苛,服務(wù)器接受到請(qǐng)求后鹊漠,會(huì)根據(jù)請(qǐng)求Headers以及Body的內(nèi)容進(jìn)行相關(guān)操作(數(shù)據(jù)添加,更新茶行,刪除等)躯概,然后同樣返回一個(gè)響應(yīng)消息回去,這個(gè)響應(yīng)消息里包含了客戶端需要的信息畔师,主要是Body(可能是一個(gè)HTML頁(yè)面)娶靡,當(dāng)然還有狀態(tài)碼,狀態(tài)信息看锉,Headers等姿锭,這樣,一次完整的HTTP請(qǐng)求就完成了伯铣。

我們會(huì)發(fā)現(xiàn)呻此,如果昨天我們了解了從URL輸入地址欄開(kāi)始,瀏覽器如何與DNS服務(wù)器配合腔寡,完成URL到IP的匹配過(guò)程焚鲜,從而定位到服務(wù)器的位置,那么今天放前,我們了解的東西忿磅,則是在知道服務(wù)器的位置之后,瀏覽器是如何在HTTP協(xié)議的約定下凭语,去完成發(fā)送與取得數(shù)據(jù)的過(guò)程葱她。也就是說(shuō),昨天我們研究了路線叽粹,今天我們研究了在路上的故事览效。

我們的學(xué)習(xí)過(guò)程却舀,也將是這樣一個(gè)循序漸進(jìn)的過(guò)程,希望我可以踏踏實(shí)實(shí)走好每一步路锤灿。

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挽拔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子但校,更是在濱河造成了極大的恐慌螃诅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件状囱,死亡現(xiàn)場(chǎng)離奇詭異术裸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)亭枷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)袭艺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人叨粘,你說(shuō)我怎么就攤上這事猾编。” “怎么了升敲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵答倡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我驴党,道長(zhǎng)瘪撇,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任港庄,我火速辦了婚禮倔既,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攘轩。我一直安慰自己叉存,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布度帮。 她就那樣靜靜地躺著歼捏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笨篷。 梳的紋絲不亂的頭發(fā)上瞳秽,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音率翅,去河邊找鬼练俐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冕臭,可吹牛的內(nèi)容都是我干的腺晾。 我是一名探鬼主播燕锥,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼悯蝉!你這毒婦竟也來(lái)了归形?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鼻由,失蹤者是張志新(化名)和其女友劉穎暇榴,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蕉世,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔼紧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狠轻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奸例。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哈误,靈堂內(nèi)的尸體忽然破棺而出哩至,到底是詐尸還是另有隱情躏嚎,我是刑警寧澤蜜自,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站卢佣,受9級(jí)特大地震影響重荠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虚茶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一戈鲁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘹叫,春花似錦婆殿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至喂饥,卻和暖如春消约,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背员帮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工或粮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捞高。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓氯材,卻偏偏與公主長(zhǎng)得像渣锦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氢哮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理泡挺,服務(wù)發(fā)現(xiàn),斷路器命浴,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • 一娄猫、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,353評(píng)論 6 152
  • API定義規(guī)范 本規(guī)范設(shè)計(jì)基于如下使用場(chǎng)景: 請(qǐng)求頻率不是非常高:如果產(chǎn)品的使用周期內(nèi)請(qǐng)求頻率非常高,建議使用雙通...
    有涯逐無(wú)涯閱讀 2,540評(píng)論 0 6
  • 本篇文章篇幅比較長(zhǎng)生闲,先來(lái)個(gè)思維導(dǎo)圖預(yù)覽一下媳溺。 一、概述 1.計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層 2.TCP/IP 通信傳輸流 ...
    滌生_Woo閱讀 55,011評(píng)論 24 557
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)碍讯,內(nèi)容來(lái)源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,223評(píng)論 3 82