web后臺服務(wù)器是如何工作的

近期準(zhǔn)備session瘾晃,希望能跟大家輕松地分享一些東西贷痪,一些常見的場景。比如:web后臺服務(wù)器到底是如何工作的蹦误。
上網(wǎng)過程對于普通人:首先劫拢,他需要一臺電腦,然后强胰,他的電腦可以接入網(wǎng)絡(luò)舱沧,最后,他可以打開瀏覽器鍵入自己想要瀏覽的網(wǎng)址偶洋,然后就可以上網(wǎng)了熟吏。但是對于計算機(jī)來講,是一個比較復(fù)雜的過程,里面包含了信息如何保存牵寺,信息如何傳遞以及信息如何展示的過程悍引。所以,針對整個上網(wǎng)過程帽氓,我們從前到后趣斤,分析一下其中包含的各種技術(shù)細(xì)節(jié),可能不全黎休,目的是拋磚引玉浓领,希望大家在簡單的流程當(dāng)中學(xué)習(xí)更多的東西分享出來,一些基礎(chǔ)知識則當(dāng)做復(fù)習(xí)奋渔。之前buddy王老吉講過瀏覽器的工作方式镊逝,所以本文內(nèi)容不包含瀏覽器的工作方式,重點在于各種后臺服務(wù)以及通信層面的分析嫉鲸。

URL

前面說到撑蒜,用戶瀏覽器中鍵入網(wǎng)址便瀏覽網(wǎng)頁信息,這個網(wǎng)址實際上就是URL玄渗,英文全稱是Uniform Resource Locator——統(tǒng)一資源定位符座菠。

統(tǒng)一資源定位符是對可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址藤树≡〉危互聯(lián)網(wǎng)上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它岁钓。

完整的升略、帶有授權(quán)部分的普通統(tǒng)一資源標(biāo)志符語法看上去如下:
協(xié)議://用戶名:密碼@子域名.域名.頂級域名:端口號/目錄/文件名.文件后綴?參數(shù)=值
協(xié)議部分可以是http,https屡限,ftp等協(xié)議類型品嚣。

協(xié)議

前面提到,互聯(lián)網(wǎng)上的每個文件都有一個唯一的URL钧大,那么翰撑,到底是如何確認(rèn)的。前面提到了協(xié)議啊央,協(xié)議是什么眶诈?比如大家寫信時都需要寫郵編、地址和姓名瓜饥,便可以通過這種方式將信郵寄到世界上唯一的那個人手里逝撬,填寫的郵編,地址和姓名就是一種協(xié)議乓土。協(xié)議的價值在于世界上所有的瀏覽器和后臺服務(wù)器都需要遵循h(huán)ttp這些協(xié)議宪潮,才能正常進(jìn)行信息的傳遞。
計算機(jī)通信跟人的通信是類似的,也是遵循各種協(xié)議的坎炼,不同的協(xié)議承載著不同的功能。通常拦键,瀏覽器上網(wǎng)使用的是http或者h(yuǎn)ttps協(xié)議谣光,從網(wǎng)絡(luò)分層的角度來講,這些協(xié)議屬于應(yīng)用層協(xié)議芬为,建立在傳輸層之上萄金。傳輸層跑是什么協(xié)議呢?相信大家都非常熟悉媚朦,傳輸層跑的是TCP和UDP協(xié)議氧敢,再往下就是網(wǎng)絡(luò)層,網(wǎng)絡(luò)層上面跑的是IP數(shù)據(jù)報询张。每層的功能各不相同孙乖,每層的協(xié)議也不同,但是一般來講份氧,越往下層唯袄,協(xié)議會越少,這樣才能化繁為簡蜗帜,從而支持不同的上層協(xié)議恋拷。傳輸層協(xié)議一般是由操作系統(tǒng)層面支持的,同時還需要跟網(wǎng)絡(luò)層進(jìn)行交互(對于物理機(jī)來說就是網(wǎng)卡)厅缺,所以針對我們操作系統(tǒng)之上的程序員來講蔬顾,新創(chuàng)造的協(xié)議都是應(yīng)用層協(xié)議,因為我們的通信都是在傳輸層(TCP和UDP)基礎(chǔ)之上構(gòu)建的湘捎。

http協(xié)議

http是應(yīng)用層協(xié)議诀豁,也就是說,在界面敲下網(wǎng)址那一刻消痛,實際上瀏覽器向服務(wù)器發(fā)送了http協(xié)議格式的消息且叁,也叫做http請求。http協(xié)議是構(gòu)建在tcp協(xié)議之上的秩伞,而tcp是可靠的協(xié)議逞带,所以http協(xié)議無需考慮可靠性,只管傳輸就可以了纱新。
http協(xié)議比較簡單展氓,如下所示:

那么瀏覽器又是如何組織http請求,并且將信息發(fā)送的相應(yīng)服務(wù)器的呢脸爱?例如:http://www.baidu.com

DNS服務(wù)

我們鍵入的僅僅是服務(wù)器域名遇汞,但是實際上在網(wǎng)絡(luò)中我們通信是通過套接字來進(jìn)行通信的。套接字=IP + 端口,在網(wǎng)絡(luò)中空入,IP的作用是用來在網(wǎng)絡(luò)層進(jìn)行路由尋址络它,尋找唯一的主機(jī);端口的作用是用來在這個主機(jī)中尋找唯一的進(jìn)程歪赢』粒總體來說,套接字可以用來在網(wǎng)絡(luò)中確定唯一主機(jī)的唯一進(jìn)程埋凯,所以通過套接字我們可以進(jìn)行通信点楼。
但是問題是上網(wǎng)通過域名來訪問,那么是如何通過域名來確認(rèn)唯一主機(jī)的唯一后臺web服務(wù)器進(jìn)程的呢白对?做一個假設(shè)掠廓,如果我們可以在互聯(lián)中提供一個確定的服務(wù),這個服務(wù)里面裝有域名到套接字的映射甩恼,上網(wǎng)的人通過這個服務(wù)獲取對應(yīng)域名的套接字蟀瞧,那么這個問題不就解決了。而實際上条摸,DNS服務(wù)原理簡單來說就是剛才假設(shè)的方法黄橘,服務(wù)商通過提供公共的DNS服務(wù),大家上網(wǎng)時便可以查詢到相應(yīng)域名對應(yīng)的套接字屈溉,通過這個套接字便可以訪問確定的服務(wù)器了塞关。真正的DNS服務(wù)其實更為復(fù)雜,分為迭代式查詢和遞歸式查詢子巾,兩種方式各有優(yōu)劣帆赢,同時,為了性能线梗,DNS服務(wù)通常也配有不同級別的緩存椰于,關(guān)于DNS的具體實現(xiàn)有興趣的可以自行查詢資料學(xué)習(xí)。
總結(jié)一下仪搔,上網(wǎng)時瀏覽器實際上做了兩件事瘾婿,第一,通過瀏覽器內(nèi)置的DNS客戶端烤咧,向DNS服務(wù)器發(fā)送請求偏陪,獲取域名對應(yīng)套接字;第二煮嫌,使用套接字發(fā)送http請求笛谦,獲取數(shù)據(jù),然后在瀏覽器端呈現(xiàn)昌阿。
另外饥脑,DNS服務(wù)也需要遵循某種協(xié)議才能通信恳邀,其協(xié)議為DNS協(xié)議,其服務(wù)固定為53端口灶轰,屬于應(yīng)用層協(xié)議谣沸。DNS英文為DomainNameSystem。其實DNS服務(wù)跟電話簿的工作方式一樣笋颤,因為你沒法記得每個人的電話號碼鳄抒,但是很容易記住每個人的名字。

后臺服務(wù)器

上網(wǎng)前椰弊,我們的計算機(jī)里面什么都沒有,為何鍵入網(wǎng)址后能在界面顯示出各種各樣的數(shù)據(jù)瓤鼻?實際上秉版,數(shù)據(jù)都來自于后臺服務(wù)器,所有的數(shù)據(jù)當(dāng)然也都存儲在后臺服務(wù)器茬祷,瀏覽器僅僅請求數(shù)據(jù)清焕。前面講了,請求數(shù)據(jù)時祭犯,使用套接字加上http請求來獲取數(shù)據(jù)秸妥,后臺則必定要提供相應(yīng)的套接字,接收信息沃粗,解析http請求粥惧,才能正常的返回客戶端需要的數(shù)據(jù)。所以最盅,后臺服務(wù)器做的工作突雪,第一,綁定套接字涡贱,通過該套接字向外提供http服務(wù)咏删;第二,解析http請求问词,根據(jù)請求返回響應(yīng)督函。

http服務(wù)器實現(xiàn)

理論上講,我們可以實現(xiàn)自己的http服務(wù)激挪,并且解析不同的http請求辰狡,返回響應(yīng)。但是垄分,作為開發(fā)者來講搓译,重復(fù)造輪子是不推薦的,市面上有多種現(xiàn)成框架供我們選擇锋喜。對于java開發(fā)者來講些己,就有tomcat或者jetty豌鸡,其他語言理論上也有類似的框架。tomcat和jetty幫我們做了什么呢段标?實際上最主要的功能還就是接受http請求涯冠,針對不同的請求返回響應(yīng),當(dāng)然逼庞,他們也提供了更多的高級特性蛇更,比如遵循servlet規(guī)范,使人們更高效的開發(fā)web應(yīng)用赛糟。

總結(jié)

總結(jié)一下派任,上網(wǎng)的實際流程在程序員的角度來看,首先需要通過DNS服務(wù)解析域名璧南,獲取該域名所在web服務(wù)器應(yīng)用程序的套接字掌逛,然后瀏覽器組裝符合http協(xié)議的請求,通過套接字發(fā)送給web服務(wù)器司倚,web服務(wù)器解析請求豆混,根據(jù)解析結(jié)果將需要返回的內(nèi)容組裝符合http協(xié)議的響應(yīng),瀏覽器接到響應(yīng)后动知,根據(jù)http協(xié)議解析響應(yīng)皿伺,獲取數(shù)據(jù),將數(shù)據(jù)展示在瀏覽器上盒粮。
包含的知識點:DNS協(xié)議鸵鸥,HTTP協(xié)議,計算機(jī)網(wǎng)絡(luò)知識丹皱,后臺服務(wù)器實現(xiàn)(tomcat/jetty等)脂男。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市种呐,隨后出現(xiàn)的幾起案子宰翅,更是在濱河造成了極大的恐慌,老刑警劉巖爽室,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汁讼,死亡現(xiàn)場離奇詭異,居然都是意外死亡阔墩,警方通過查閱死者的電腦和手機(jī)嘿架,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啸箫,“玉大人耸彪,你說我怎么就攤上這事⊥粒” “怎么了蝉娜?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵唱较,是天一觀的道長。 經(jīng)常有香客問我召川,道長南缓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任荧呐,我火速辦了婚禮汉形,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘倍阐。我一直安慰自己概疆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布峰搪。 她就那樣靜靜地躺著岔冀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罢艾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天尽纽,我揣著相機(jī)與錄音咐蚯,去河邊找鬼。 笑死弄贿,一個胖子當(dāng)著我的面吹牛春锋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播差凹,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼期奔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了危尿?” 一聲冷哼從身側(cè)響起呐萌,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谊娇,沒想到半個月后肺孤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡济欢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年赠堵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片法褥。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡茫叭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出半等,到底是詐尸還是另有隱情揍愁,我是刑警寧澤呐萨,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站吗垮,受9級特大地震影響垛吗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烁登,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一怯屉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饵沧,春花似錦锨络、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至是钥,卻和暖如春掠归,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悄泥。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工虏冻, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弹囚。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓厨相,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸥鹉。 傳聞我的和親對象是個殘疾皇子蛮穿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

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