本文主要參考慕課網(wǎng)Jokcy老師課程HTTP協(xié)議原理+實(shí)踐
請(qǐng)支持正版,抵制盜版,維護(hù)每一位辛苦付出的人的合法權(quán)益!
本章關(guān)鍵詞:http、網(wǎng)絡(luò)模型、報(bào)文格式
總覽

一、5層網(wǎng)絡(luò)模式介紹

- http是基于tcp/ip協(xié)議
- 物理層:定義物理設(shè)備如何傳輸數(shù)據(jù)
電腦硬件、網(wǎng)卡端口、網(wǎng)線、光纜
- 數(shù)據(jù)鏈路層:在通信的實(shí)體間建立數(shù)據(jù)鏈路連接
- 網(wǎng)絡(luò)層:為數(shù)據(jù)在節(jié)點(diǎn)之間傳輸創(chuàng)建邏輯鏈路
上面三層開(kāi)發(fā)web基本不用去深入了解,如果有興趣,可以找相關(guān)資料看下
- 傳輸層:向用戶提供可靠的端到端(End-to-End)服務(wù)
服務(wù)的概念:就是我們自己的電腦建立了到百度的服務(wù)器連接之后,兩端如何去傳輸數(shù)據(jù),都是在傳輸層定義
傳輸層向高層屏蔽了下層數(shù)據(jù)通信的細(xì)節(jié)
- 應(yīng)用層:為應(yīng)用軟件提供了很多服務(wù),構(gòu)建于TCP協(xié)議之上,屏蔽了網(wǎng)絡(luò)傳輸相關(guān)細(xì)節(jié)
二、HTTP協(xié)議發(fā)展歷史
- HTTP/0.9
只有一個(gè)命令GET
沒(méi)有HEADER等描述數(shù)據(jù)的信息
服務(wù)器發(fā)送完畢,就關(guān)閉TCP連接 - HTTP/1.0
增加了很多命令
增加status code和header
多字符集支持、多部分發(fā)送、權(quán)限、緩存等 - HTTP/1.1
持久連接
pipeline
增加host和其他一些命令 - HTTP2
所有數(shù)據(jù)以二進(jìn)制傳輸
同一個(gè)連接里面發(fā)送多個(gè)請(qǐng)求不再需要按照順序來(lái)
頭信息壓縮以及推送等提高效率的功能
三、HTTP的三次握手
- HTTP只有請(qǐng)求和響應(yīng),不存在連接的概念,是需要TCP建立連接的,一個(gè)TCP connection可以發(fā)送多個(gè)http請(qǐng)求
http2中TCP connection上的http請(qǐng)求是可以并發(fā)的 -
三次握手時(shí)序圖
三次握手.png
SYN是一個(gè)標(biāo)志位,就是說(shuō)這是一個(gè)創(chuàng)建請(qǐng)求的數(shù)據(jù)包
三次握手目的:防止服務(wù)端開(kāi)啟一些無(wú)用的連接,規(guī)避服務(wù)器網(wǎng)絡(luò)延遲導(dǎo)致傳輸?shù)囊恍﹩?wèn)題

四、URI、URL和URN
- Uniform Resource Identifier:統(tǒng)一資源標(biāo)志符
用來(lái)唯一標(biāo)識(shí)互聯(lián)網(wǎng)上的信息資源
包含URL和URN - Uniform Resource Locator:統(tǒng)一資源定位器
http://user:pass@host.com:80/path?query=string#hash - URN:永久統(tǒng)一資源定位符
在資源移動(dòng)之后還能被找到
目前還沒(méi)有非常成熟的使用方案
五、HTTP報(bào)文格式

- HTTP方法:用來(lái)定義對(duì)于資源的操作
GET、POST、PUSH、DELETE等
從定義上講有各自的語(yǔ)義 - HTTP CODE:定義服務(wù)器對(duì)請(qǐng)求的處理結(jié)果
100-199代表操作要持續(xù)進(jìn)行,接下去要再做一些其他的事情,請(qǐng)求才會(huì)繼續(xù)返回給你
200-299代表操作時(shí)成功的
300-399代表操作需要重定向
400-499代表發(fā)送的請(qǐng)求有問(wèn)題
401:發(fā)送這個(gè)請(qǐng)求的時(shí)候沒(méi)有做認(rèn)證,沒(méi)有權(quán)限獲取請(qǐng)求資源的內(nèi)容
500-599代表服務(wù)器出現(xiàn)了錯(cuò)誤
各個(gè)區(qū)間的CODE有各自的語(yǔ)義
好的HTTP服務(wù)可以通過(guò)CODE判斷結(jié)果
學(xué)完之后不要再只用200和500了啊,可以定義更多的請(qǐng)求,方便客戶端判斷問(wèn)題
六、創(chuàng)建一個(gè)簡(jiǎn)單到web服務(wù)器
- 演示使用node.js,需要到官網(wǎng)下載一個(gè)版本的node.js
- 創(chuàng)建server.js文件
/*
* @Author: Qinxianyun
* @Date: 2018-08-25 23:34:05
* @Last Modified by: Qinxianyun
* @Last Modified time: 2018-08-25 23:37:19
*/
const http = require('http')
http.createServer(function (request,response){
console.log('request come',request.url)
response.end('123')
}).listen(8888)
console.log('server listening on 8888')
-
通過(guò)node啟動(dòng)
啟動(dòng).png - 訪問(wèn)http://localhost:8888/
結(jié)果.png


