HTTP相關
明確概念:
URI:uniform resource identifier統(tǒng)一資源標識符,用字符串標識某一互聯(lián)網(wǎng)資源
URI包含URL與URN(統(tǒng)一資源名)兩種形式
URL:uniform resource locator統(tǒng)一資源定位符
URL是URI的子集
1.URL
通用格式(9個通用組件):<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
scheme:方案,訪問服務器以獲取資源時要使用協(xié)議,如:http ,ftp
如:https://www.baidu.com/ 采用的是https的方案
ftp://202.114.1.121 采用的是ftp的方案
user:password:訪問資源時需要的用戶名和密碼,二者用‘:’分隔
host:資源宿主服務器的主機名或IP地址
port:端口,默認端口為80(HTTP端口)
path:路徑,服務端上的資源本地名,用斜杠與前面的部分分隔開來,如:https://www.baidu.com/index.html訪問的就是根目錄下的index.html
params:參數(shù),參數(shù)為名/值對(如:format=json ),用分號來與其他組件分隔開,一個路徑段可以包含多個參數(shù)字段,各參數(shù)之間用‘&’分隔,如:http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true 這個例子有兩個路徑段,分別帶參數(shù)sale=false和graphics=true
query:查詢,用字符‘?’來將其與其他組件分隔開來,用于縮小請求的資源范圍
如:http://china.huanqiu.com/article/2017-03/10392334.html?from=bdwz中,查詢字段為from=bdwz
frag:片段,用‘#’將其與其他組件分隔開來,表示請求一個資源內(nèi)部的片段
2.HTTP報文
報文分為請求報文與響應報文,二者的格式如下:
請求報文:
請求行:<method> <request-URL> <version>
<headers>
<entity-body>
響應報文:
響應行:<version> <status> <reson-phrase>
<headers>
<entity-body>
具體內(nèi)容如下:
1.method方法,即請求方希望服務器執(zhí)行的動作,HTTP中支持的主要方法如下:

2.request-URL,請求的完整的URL
3.version,所采用的HTTP版本號,如HTTP/1.0,HTTP/1.1
4.entity-body,實體
5.status,返回的狀態(tài)碼,返回對于所發(fā)送請求的情況反饋

6.reson-phrase,對于狀態(tài)碼進行解釋的短語
7.headers,首部
首部分為:通用首部,請求首部,響應首部,實體首部與拓展首部,由于首部是決定HTTP連接細節(jié)的主要內(nèi)容,比較繁多,加之作者本身是移動端開發(fā)人員,所以沒有對HTTP的首部進行更加深入的了解,需要了解的同學請自行查閱手冊。
3.HTTP連接管理
對于TCP而言造成的時延可能出現(xiàn)在下列幾個方面:
1.建立TCP連接時的三次握手
2.TCP慢啟動過程與擁塞控制
3.對于少量數(shù)據(jù)使用的Nagle算法
4.延遲確認應答
5.捎帶應答
6.TIME_WAIT時延與端口耗盡
HTTP采用了下列三種方式來優(yōu)化上面的問題:
1.并行連接
通過多條TCP連接發(fā)起并發(fā)的HTTP請求,但由于過多的連接會消耗大量的網(wǎng)絡資源,同時加大服務器的負擔,所以若建立很多的并行連接并不能提高網(wǎng)絡傳輸?shù)男剩苑掌饕矔刂瓶蛻舳怂⒌牟⑿羞B接的數(shù)量。
2.持久連接
重用已建立的TCP連接,即在事務處理完畢后保持TCP連接為打開狀態(tài),降低了TCP建立與關閉時的時延開銷。需要注意的是HTTP/1.0的持久連接默認是關閉狀態(tài),需要通過Connection:keep-alive來激活,但是HTTP/1.1中就默認持久連接為激活的,若不需要則在首部中添加Connection:close。
3.管道化連接
通過共享的TCP連接發(fā)起并發(fā)的HTTP請求,即在收到響應之前,將多條請求放入隊列。
下面這張圖很形象的說明了持久連接與管道化連接。

4.HTTPS簡介
概念:
SSL:secure socket layer安全套接層
TLS:transport layer security安全層傳輸協(xié)議
HTTPS(HTTP secure超文本傳輸安全協(xié)議):與SSL組合使用的HTTP,也稱為HTTP over SSL,即HTTP不再直接與TCP通信,而是直接與SSL協(xié)議通信,再由SSL與TCP通信
加入了SSL層之后,HTTP就擁有了HTTPS的加密,證書和完整性保護等功能。

共享密鑰:也叫對稱密鑰,即加密與解密都用同一個密鑰
公開密鑰:一對非對稱密鑰,加密用公鑰,解密用私鑰
HTTPS:采用混合加密機制,先通過公開密鑰方式傳遞共享密鑰,再通過共享密鑰加密報文傳遞數(shù)據(jù)
書中的一張圖就很清晰地說明了HTTPS的工作流程:

接下來,什么是數(shù)字簽名呢?
這個網(wǎng)址很簡介形象的描述了數(shù)字簽名
總結:
寫到這里,關于網(wǎng)絡基礎的知識已經(jīng)總結完了,由于本人是移動端開發(fā)人員,在平時的開發(fā)工作中并不需要非常詳盡的網(wǎng)絡知識細節(jié),這三篇文章可以作為學習筆記也可以作為我在自學過程中的歸納總結,也可作為面試時的網(wǎng)絡知識準備。總之,這三篇文章比較簡潔的從一個非網(wǎng)絡開發(fā)人員的角度來理解網(wǎng)絡基礎,主要是TCP/IP的部分比較重要,關于HTTP的部分則比較簡略,經(jīng)過這段時間的學習,算是補上大學時的網(wǎng)絡基礎課程,雖然平時用不到這樣的知識,但我相信知識都是貫通的,知道總比不知道好。最后,如果本文中有任何錯誤的理解,歡迎留言討論_