Http
HyperText Transfer Protocol蝌借,超文本協(xié)議
通過此協(xié)議,我們可以將遍布全世界的Web服務(wù)器上的信息塊快速汁胆,便捷贮乳,可靠的搬移到我們自己桌面上的Web瀏覽器上。
這些信息塊指的是什么呢瘾婿?
我們平時(shí)看到的圖片蜻牢,電影,音頻偏陪,文本抢呆,Html頁面都包含在其中。
Web客戶端和服務(wù)器
資源
Web服務(wù)器是Web資源的宿主
媒體類型
因特網(wǎng)上有數(shù)千種不同的數(shù)據(jù)類型笛谦,當(dāng)Web瀏覽器從服務(wù)器取回一個(gè)對象時(shí)抱虐,需要知道其類型,以便知道如何處理這個(gè)對象饥脑。
于是Http為每種要通過Web傳輸?shù)膶ο蟠蛏狭?strong>數(shù)據(jù)格式標(biāo)簽恳邀,名為MIME(Multipurpose Internet Mail Extemsion)類型懦冰,MIME是一種文本標(biāo)記,表示一種主要的對象類型和一個(gè)特定的子類型谣沸,中間由一條斜杠來分割刷钢。如:
- Html格式的文本文檔的MIME為text/html
- JPEG圖片的MIME為image/jpeg
URI
每個(gè)Web服務(wù)器資源都有一個(gè)名字,服務(wù)器資源名稱被稱為統(tǒng)一資源標(biāo)識符(Uniform Resource Indentifier,URI)乳附,URI有兩種形式内地,分別是URL和URN。
URL
統(tǒng)一資源定位符(URL)
- URL的第一部分被稱為方案(scheme),說明了訪問資源所使用的協(xié)議類型赋除。
- 第二部分給出了服務(wù)器的因特網(wǎng)地址
- 其余部分指定了Web服務(wù)器上的某個(gè)資源
URN
統(tǒng)一資源名(URN)
URN是作為特定內(nèi)容的唯一名稱使用的阱缓,與目前的資源所在地?zé)o關(guān)
事務(wù)
一個(gè)HTTP事務(wù)由一條請求命令(客戶端發(fā)往服務(wù)器)和一個(gè)響應(yīng)結(jié)果(服務(wù)器發(fā)回客戶端)組成。
通信是通過名為HTTP報(bào)文的格式化數(shù)據(jù)塊進(jìn)行
方法
HTTP支持幾種不同的請求命令举农,這些命令被稱為HTTP方法茬祷,每條請求報(bào)文都包含一個(gè)方法,方法會(huì)告訴服務(wù)器要執(zhí)行什么動(dòng)作
- GET
- PUT
- DELETE
- POST
- HEAD
狀態(tài)碼
每條HTTP響應(yīng)報(bào)文返回時(shí)并蝗,會(huì)攜帶一個(gè)狀態(tài)碼,狀態(tài)碼是一個(gè)三位數(shù)字的代碼秸妥,告訴客戶端是否請求成功滚停,或者是否需要采取其他動(dòng)作,如200粥惧,302,404
報(bào)文
HTTP報(bào)文分為請求報(bào)文和響應(yīng)報(bào)文
包含以下三個(gè)部分:
- 起始行键畴,報(bào)文的第一行就是起始行,在請求報(bào)文中用來說明要做些什么突雪,在響應(yīng)報(bào)文中說明出現(xiàn)了什么情況
- 首部字段起惕,起始行后有零個(gè)或多個(gè)首部字段,每個(gè)首部字段都包含一個(gè)名字和一個(gè)值咏删,兩者用:分割惹想,以一個(gè)空行結(jié)束
- 主體,其中包含了所有類型的數(shù)據(jù)督函,請求主體中包含了要發(fā)送給Web服務(wù)器的數(shù)據(jù)嘀粱,響應(yīng)主體中裝載了要返回給客戶端的數(shù)據(jù)
連接
知道了報(bào)文的存在后,我們再來看一下它是如何從一個(gè)地方搬移到另一個(gè)地方去的辰狡。
HTTP是應(yīng)用層協(xié)議锋叨,它不需要關(guān)心網(wǎng)絡(luò)通信的具體細(xì)節(jié),而是將聯(lián)網(wǎng)的細(xì)節(jié)交給了通用宛篇,可靠的因特網(wǎng)傳輸協(xié)議TCP/IP
TCP/IP
TCP提供了:
- 無差錯(cuò)的數(shù)據(jù)傳輸
- 按序傳輸
- 未分段的數(shù)據(jù)流
只要建立了TCP連接娃磺,客戶端和服務(wù)器之間的報(bào)文交換就不會(huì)消失,不會(huì)被破壞叫倍,也不會(huì)在接收時(shí)出現(xiàn)錯(cuò)序了偷卧。
連接豺瘤,IP地址及端口號
在HTTP客戶端向服務(wù)器發(fā)送報(bào)文之前,需要問網(wǎng)際協(xié)議(Internet Protocol,IP)地址和端口號在客戶端和服務(wù)器之間建立一條TCP/IP連接涯冠。
那么瀏覽器是怎么通過瀏覽器顯示位于遠(yuǎn)端服務(wù)器中的某個(gè)HTML資源的呢炉奴?
- 瀏覽器從URL中解析出服務(wù)器的主機(jī)名
- 瀏覽器將服務(wù)器的主機(jī)名轉(zhuǎn)換為服務(wù)器的IP地址
- 瀏覽器將端口號從URL中解析出來(如果有的話)
- 瀏覽器建立一條與Web服務(wù)器的TCP連接;
- 瀏覽器向服務(wù)器發(fā)送一條HTTP請求報(bào)文
- 服務(wù)器向?yàn)g覽器回送一條HTTP響應(yīng)報(bào)文
- 關(guān)閉連接蛇更,瀏覽器顯示文檔
Web的結(jié)構(gòu)組件
Web應(yīng)用程序:
代理
代理是位于客戶端和服務(wù)器之間的HTTP中間實(shí)體瞻赶,是Web安全,應(yīng)用集成以及性能優(yōu)化的重要組成模塊,其接受所有客戶端的HTTP請求派任,然后將這些請求轉(zhuǎn)發(fā)給服務(wù)器
[圖片上傳失敗...(image-ca2da6-1517970793093)]
緩存
Web緩存或代理緩存是一種特殊的HTTP代理服務(wù)器砸逊,可以將經(jīng)過代理傳送的常用文檔復(fù)制保存起來,下一個(gè)請求同一文檔的客戶端就可以享受緩存的私有副本所提供的服務(wù)了
網(wǎng)關(guān)(gateway)
網(wǎng)關(guān)是一種特殊的服務(wù)器掌逛,作為其他服務(wù)器的中間實(shí)體使用师逸,通常用于將HTTP流量轉(zhuǎn)換成其他的協(xié)議
隧道
隧道(tunnel),是在連接建立起來后,在兩條連接之間對原始數(shù)據(jù)進(jìn)行盲轉(zhuǎn)發(fā)的HTTP應(yīng)用程序豆混,通常用來在一條或多條HTTP連接上轉(zhuǎn)發(fā)非HTTP數(shù)據(jù)篓像,轉(zhuǎn)發(fā)時(shí)不會(huì)窺探數(shù)據(jù)。
Agent代理
Agent代理是代表用戶發(fā)起HTTP請求的客戶端程序皿伺。所有發(fā)布Web請求的應(yīng)用程序都是Agent代理