Tim Berners-Lee寫出了第一個網(wǎng)頁、第一個瀏覽器和第一個服務(wù)器。
網(wǎng)頁我們見過,瀏覽器我們見過,但我們還沒見過服務(wù)器。
了解服務(wù)器的原理是非常重要的。
我們可以自己搞一個服務(wù)器,然后提供HTTP服務(wù)。
- 我們已經(jīng)有一個服務(wù)器了,我們所使用的電腦就是服務(wù)器。(相對我們的電腦,服務(wù)器有更好的CPU,更高的內(nèi)存,不需要顯卡和顯示器等)
- 但是我們還沒有提供HTTP服務(wù)的程序。
用腳本就可以提供HTTP服務(wù),我們就用Node.js腳本試試吧。
接收請求
用一個文件就可以實(shí)現(xiàn):
- 新建一個安全目錄,進(jìn)入目錄
cd ~/Desktop; mkdir node-demo; cd node-demo touch server.js- 編輯它,內(nèi)容
- 運(yùn)行
node server或node server.js(會看到提示要加端口號) - 根據(jù)提示調(diào)整命令
- 成功以后,這個server保持運(yùn)行(ctrl+c可中斷)
服務(wù)器完成。
這個服務(wù)器目前只有一個功能,就是打印出路徑和查詢字符串。
還缺少一個重要功能,發(fā)出HTTP響應(yīng)。
打開一個新的bash窗口,運(yùn)行curl http://localhost:你指定的端口號/xxx或crul http://127.0.0.1:你指定的端口號/xxx(或者直接用瀏覽器訪問)
你會發(fā)現(xiàn)server打印出了路徑。
$ node server-before.js 8888
監(jiān)聽 8888 成功
請用在空中轉(zhuǎn)體720度然后用電飯煲打開 http://localhost:8888
得到 HTTP 路徑
/xxx
查詢字符串為
不含查詢字符串的路徑為
/xxx
(如果你的手機(jī)和你的電腦在同一個內(nèi)網(wǎng)中,你可以試試用手機(jī)來訪問這個server,同樣會打印出路徑)
- 這說明server收到了我們用curl發(fā)出的請求;
- 但是由于server沒有發(fā)出響應(yīng),curl就一直等在那里,無法退出(ctrl+c中斷這個傻curl吧)。
發(fā)出響應(yīng)
接下來我們讓server發(fā)出響應(yīng)。
- 編輯server.js
- 在中間標(biāo)注區(qū)間添加兩行代碼
response.write('Hi')
response.end()
- 中斷之前的server,重新運(yùn)行
node server 8888 - 運(yùn)行
curl http://localhost:8888/xxx,結(jié)果如下:
Hi% //%表示結(jié)尾,不想看到它可以把'Hi'換成'Hi\n'
- 好了,響應(yīng)添加成功
- 使用
curl -s -v -- "http://localhost:8888/xxx"可以查看完整的請求和響應(yīng)
注意:
- 后綴是沒有用的,文件內(nèi)容是由HTTP頭中的Content-Type保證的;
- HTTP路徑不是文件路徑,/xxx.html不一定對應(yīng)xxx.html文件。
這個腳本返回一個頁面( 代碼 )。注意路徑中的后綴都是混亂的,返回的內(nèi)容根據(jù)Content-Type而定。