7、服務(wù)器入門(mén)


前面我們說(shuō)過(guò)李爵士建立了第一個(gè)網(wǎng)頁(yè)兼呵、第一個(gè)瀏覽器兔辅、第一個(gè)服務(wù)器腊敲。前面兩個(gè),我們都見(jiàn)過(guò)了,但是服務(wù)器我們目前沒(méi)有親自實(shí)現(xiàn)過(guò)匕荸,所以有必要了解一下苔悦,服務(wù)器的一些基礎(chǔ)知識(shí)。


以下是手寫(xiě)服務(wù)器腳本的必備知識(shí)

  • HTTP是建立在TCP/IP的基礎(chǔ)之上的
    • TCP是什么
      TCP 傳輸控制協(xié)議(Transmission Control Protocol)
面試必問(wèn)的兩道題
1没宾、TCP和UDP的區(qū)別
TCP是可靠的、面向連接的沸柔,相對(duì)UDP速度慢循衰,UDP是不可靠的,不是面向連接的褐澎,速度快会钝。可靠是指你的請(qǐng)求成不成功都會(huì)有響應(yīng)工三,成功了就告訴你ok,失敗了也告訴你訪問(wèn)失敗迁酸,面向連接是指每次必須發(fā)起一個(gè)請(qǐng)求,這端是瀏覽器徒蟆,另一端是你要訪問(wèn)的地址
TCP可以看成是把石子扔到水里胁出,UDP是把石頭扔進(jìn)草垛里面
2、TCP的三次握手是啥
第一次 客戶端問(wèn)服務(wù)器段审,我能連接嗎
第二次 服務(wù)器回答說(shuō)全蝶,我準(zhǔn)備好了,可以連接啦
第三次 客戶端說(shuō)寺枉,那我就真的連接嘍

上述兩個(gè)面試題可以仔細(xì)閱讀這兩篇文章 TCP與UDP的區(qū)別抑淫、TCP三次握手詳解

  • 路由器的基礎(chǔ)
    只要我們?cè)诨ヂ?lián)網(wǎng)中,就要用到IP 網(wǎng)絡(luò)協(xié)議(Internet Protocol),IP有分為內(nèi)網(wǎng)IP和外網(wǎng)IP,它們的分界線就是路由器姥闪。


    內(nèi)網(wǎng)和外網(wǎng).png
  • 內(nèi)網(wǎng)之間可以自由溝通始苇,外網(wǎng)之間自由溝通。但是內(nèi)外網(wǎng)不能直接溝通筐喳,必須通過(guò)路由催式,路由是一夫當(dāng)關(guān)萬(wàn)夫莫開(kāi),也叫網(wǎng)關(guān)避归。
  • 當(dāng)路由器連上電信的服務(wù)器荣月,就會(huì)獲得一個(gè)外網(wǎng)IP(14.17.32.211),當(dāng)你重啟的時(shí)候又會(huì)重新分配一個(gè)。所以大多數(shù)的公司梳毙,會(huì)買(mǎi)一個(gè)固定的哺窄。
  • 好了,此時(shí)路由和外界可以聯(lián)通了,那么如何和你聯(lián)通呢萌业。答案就是 內(nèi)網(wǎng)
  • 路由器會(huì)在你家里創(chuàng)建一個(gè)內(nèi)網(wǎng)坷襟,內(nèi)網(wǎng)中的設(shè)備使用內(nèi)網(wǎng) IP,一般來(lái)說(shuō)這個(gè) IP 的格式都是 192.168.xxx.xxx生年。路由器還會(huì)給自己優(yōu)先分配一個(gè)好的內(nèi)網(wǎng)IP(192.168.1.1)婴程,你就有可能是192.168.1.2。
  • 現(xiàn)在路由器有兩個(gè) IP晶框,一個(gè)外網(wǎng) IP(14.17.32.211)和一個(gè)內(nèi)網(wǎng) IP(192.168.1.1)
    具有雙重間諜的作用排抬。它是內(nèi)外溝通的橋梁
  • 除此之外,還有一個(gè)localhost127.0.0.10.0.0.0這兩個(gè)很重要的IP
    可以在你的hosts文件里面修改localhost文件
  • 端口和 ip授段、各種服務(wù)
    你想要訪問(wèn)一個(gè)設(shè)備(前提是你使用的是 TCP 或 UDP 協(xié)議。還記得嗎番甩,HTTP 就使用了 TCP)侵贵,只指定 IP 是不夠的,還必須指定端口(Port)缘薛。
    端口就是一個(gè)編號(hào)窍育,并不是物理設(shè)備。因?yàn)橐粋€(gè)設(shè)備里面有很多功能宴胧,你不知道用哪個(gè)功能漱抓,所以要用端口來(lái)區(qū)分你要哪個(gè)服務(wù)。
    -兩個(gè)問(wèn)題
    1恕齐、我怎么知道使用哪個(gè)端口
    詳見(jiàn)0-1023端口詳解
    2乞娄、總共有多少個(gè)端口啊
    每個(gè)機(jī)器一共有 65535(2的16次方減1)個(gè)端口(這是協(xié)議規(guī)定的)。不過(guò)這些端口的使用由一些規(guī)定
1显歧、0 到 1023(2的10次方減1)號(hào)端口是留給系統(tǒng)使用的仪或,你只有擁有了管理員權(quán)限后,才能使用這 1024 個(gè)端口士骤。
2范删、其他端口可以給普通用戶使用
3、如果一個(gè)端口正在提供服務(wù)拷肌,也就是被占用了到旦,那么就不能再使用這個(gè)端口。除非你先停掉正在占用這個(gè)端口的服務(wù)巨缘。以后你們會(huì)經(jīng)常遇到這個(gè)問(wèn)題添忘。
  • 綜上所述,要想訪問(wèn)一個(gè)地址带猴,必須提供IP和端口號(hào)N艉骸!!
    IP通過(guò)DNS解析你的域名靶病,給你会通。端口號(hào)必須給出
    問(wèn)題來(lái)了
    我訪問(wèn)http://qq.com 時(shí)并沒(méi)有提供端口號(hào),為什么我依然可以訪問(wèn)
因?yàn)闉g覽器給你加上了80端口

用node.js腳本搭建最簡(jiǎn)單的服務(wù)器

    1. 用server接收請(qǐng)求
  • 2.用server發(fā)揮響應(yīng)娄周,完成網(wǎng)頁(yè)的解析
    核心代碼如下所示涕侈,可以模擬一個(gè)微型的服務(wù)器
    一定要注意,response.setHeader('ContentType', 'text/html;charset=utf-8')
    這是告訴瀏覽器兩件事煤辨,一是設(shè)置頭文件裳涛,告訴瀏覽器響應(yīng)的第四部分按照什么格式來(lái)響應(yīng),二是告訴瀏覽器字符編碼采用utf-8,避免亂碼众辨。
    [圖片上傳中...(響應(yīng)修改編碼.png-1d11fb-1512915328362-0)]

    響應(yīng)修改編碼.png

    響應(yīng)內(nèi)容.png
var http = require('http')
var fs = require('fs')
var url = require('url')
var port = process.argv[2]

if(!port){
  console.log('請(qǐng)指定端口號(hào)好不啦端三?\nnode server.js 8888 這樣不會(huì)嗎?')
  process.exit(1)
}

var server = http.createServer(function(request, response){
  var parsedUrl = url.parse(request.url, true)
  var path = request.url 
  var query = ''
  if(path.indexOf('?') >= 0){ query = path.substring(path.indexOf('?')) }
  var pathNoQuery = parsedUrl.pathname
  var queryObject = parsedUrl.query
  var method = request.method

  /******** 從這里開(kāi)始看鹃彻,上面不要看 ************/

  console.log('方方說(shuō):得到 HTTP 路徑\n' + path)
  if (path == '/style'){
    response.setHeader('Content-Type', 'text/css;charset=utf-8')
    response.write('body{backgroun-color: #ddd;}h1{color: red;}')
    response.end()    
  }else if(path == '/script'){
    response.setHeader('Content-Type', 'text/javascript;charset=utf-8')
    response.write('alert("這是js執(zhí)行的")')    
    response.end()
  }else if(path == '/index'){
    response.setHeader('Content-Type', 'text/html;charset=utf-8')
    response.write('<!DOCTYPE>\n<html>' + 
        '<head><link rel="stylesheet" href="/style"></head>' + 
        '<body>' + 
        '<h1>你好郊闯,Node.js</h1>' + 
        '<script src="/script"></script>' + 
        '</body></html>')
    response.end()
  }else{
    response.statusCode = 404
    response.end()
  }

  /******** 代碼結(jié)束,下面不要看 ************/
})

server.listen(port)
console.log('監(jiān)聽(tīng) ' + port + ' 成功\n請(qǐng)用在空中轉(zhuǎn)體720度然后用電飯煲打開(kāi) http://localhost:' + port)

再次強(qiáng)調(diào) 再次強(qiáng)調(diào)蛛株,后綴是廢話团赁。文件內(nèi)容是有 HTTP 頭中的 Content-Type 保證的

HTTP 路徑不是文件路徑!=髀摹欢摄!/xxx.html 不一定對(duì)應(yīng) xxx.html 文件
HTTP 路徑不是文件路徑!K袼凇怀挠!/xxx.html 不一定對(duì)應(yīng) xxx.html 文件
HTTP 路徑不是文件路徑!4V印唆香!/xxx.html 不一定對(duì)應(yīng) xxx.html 文件

  • 你請(qǐng)求的時(shí)候,查詢的內(nèi)容是吨艇?后面的內(nèi)容


    查詢的參數(shù)從問(wèn)好開(kāi)始.png

當(dāng)你在地址欄輸入一個(gè)網(wǎng)頁(yè)的時(shí)候發(fā)生了什么呢躬它?

你輸入完之后,缺http,瀏覽器幫你加上东涡,缺路徑冯吓,幫你加上/,缺端口疮跑,幫你加上80组贺。


QQ圖片20171210222219.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市祖娘,隨后出現(xiàn)的幾起案子失尖,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掀潮,死亡現(xiàn)場(chǎng)離奇詭異菇夸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)仪吧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)庄新,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人薯鼠,你說(shuō)我怎么就攤上這事择诈。” “怎么了出皇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵羞芍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我恶迈,道長(zhǎng)涩金,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任暇仲,我火速辦了婚禮,結(jié)果婚禮上副渴,老公的妹妹穿的比我還像新娘奈附。我一直安慰自己,他們只是感情好煮剧,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布斥滤。 她就那樣靜靜地躺著,像睡著了一般勉盅。 火紅的嫁衣襯著肌膚如雪佑颇。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天草娜,我揣著相機(jī)與錄音挑胸,去河邊找鬼。 笑死宰闰,一個(gè)胖子當(dāng)著我的面吹牛茬贵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播移袍,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼解藻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了葡盗?” 一聲冷哼從身側(cè)響起螟左,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后胶背,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體巷嚣,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年奄妨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涂籽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砸抛,死狀恐怖评雌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情直焙,我是刑警寧澤景东,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站奔誓,受9級(jí)特大地震影響斤吐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厨喂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一和措、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜕煌,春花似錦派阱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至盒刚,卻和暖如春腺劣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背因块。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工橘原, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贮聂。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓靠柑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吓懈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子歼冰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359