HTTP是什么
一闺鲸、HTTP是什么
- HTTP全稱為Hyper Text Transfer Protocol眷蚓,被譯為超文本傳輸協(xié)議,是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的—種網(wǎng)絡(luò)協(xié)議。
- HTTP協(xié)議是在Web上進(jìn)行數(shù)據(jù)交換的基礎(chǔ)鲤看,是一種“客戶端-服務(wù)器端”協(xié)議。也就是說耍群,請(qǐng)求通常是由像劉覽器這樣的接受方發(fā)起的义桂。一個(gè)完整的Web文檔通常是由不同的子文檔拼接而成的,像是文本蹈垢、布局描述慷吊、圖片、視頻曹抬、腳本等等溉瓶。
- 設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法。
二、HTTP協(xié)議歷史與標(biāo)準(zhǔn)
- HTTP/O.9: 1991年制定嚷闭,有嚴(yán)重設(shè)計(jì)缺陷攒岛,只支持GET方法,不支持MIIME類型胞锰,很快被
HTTP/1.0取代灾锯。 - HTTP/1.0: 1996年制定,支持多種請(qǐng)求方法嗅榕,支持多媒仲對(duì)象顺饮,得到廣泛應(yīng)用。
- HTTP/10+:支持持久連接凌那、虛擬主機(jī)兼雄、代理連接等新特性,成為非官方的事實(shí)標(biāo)準(zhǔn)帽蝶。
- HTTP/11: 1999年制定赦肋,校正HTTP中的設(shè)計(jì)缺陷,性能優(yōu)化励稳,刪除一些不好的特性佃乘。
- HTTP-NG(或HTTP/20):關(guān)注HTTP協(xié)議的性能優(yōu)化以及更強(qiáng)大的服務(wù)邏輯遠(yuǎn)程執(zhí)行框架,研究工作仍在進(jìn)行中驹尼。
三趣避、HTTP請(qǐng)求與響應(yīng)消息
? 客戶端和服務(wù)端通過交換各自的消息(與數(shù)據(jù)流正好相反)進(jìn)行交互。
由像瀏覽器這樣的客戶端發(fā)出的消息叫做****請(qǐng)求( requests )
被服務(wù)端回應(yīng)的消息叫做****響應(yīng)(responses )
四新翎、HTTP基本原理
HTTP被設(shè)計(jì)于上20世紀(jì)90年代初期程帕,是一種可擴(kuò)展的協(xié)議。
HTTP是應(yīng)用層的協(xié)議地啰,通過TCP愁拭,或者是TLS-加密的TCP連接來發(fā)送,理論上任何可靠的傳輸協(xié)議都可以使用亏吝。
因?yàn)槠淞己玫臄U(kuò)展性敛苇,時(shí)至今日,它不僅被用來傳輸超文本文檔顺呕,還用來傳輸圖片枫攀、視頻或者向服務(wù)器發(fā)送如HTML表單這樣的信息。
-
HTTP還可以根據(jù)網(wǎng)頁需求株茶,僅獲取部分Web文檔內(nèi)容更新網(wǎng)頁来涨。
五、HTTP的基本特性
- HTTP是簡單的
雖然下一代HTTP/2協(xié)議將HTTP消息封裝到了幀中启盛,HTTP大體上還是被設(shè)計(jì)得簡單易讀蹦掐。
HTTP報(bào)文能夠被人讀懂技羔,還允許簡單測試,降低了門檻卧抗。 -
HTTP是可擴(kuò)展的
在HTTP/1.O中出現(xiàn)的HTTP headers讓協(xié)議擴(kuò)展變得非常容易藤滥。 -
HTTP是無狀態(tài),有會(huì)話的
在同一個(gè)連接中社裆,兩個(gè)執(zhí)行成功的請(qǐng)求之間是沒有關(guān)系的拙绊。這就帶來了一個(gè)問題,用戶沒有辦法在
同一個(gè)網(wǎng)站中進(jìn)行連續(xù)的交互泳秀。 - HTTP和連接
一個(gè)連接是由傳輸層來控制的标沪,這從根本上不屬于HTTP的范圍。
六嗜傅、HTTP能控制什么
以下是可以被HTTP控制的常見特性:
- 緩存
- 開放同原限制
- 認(rèn)證
基本的認(rèn)證功能可以直接通過HTTP提供金句,或用HTTP Cookies來設(shè)置指定的會(huì)話。 - 代理和隧道
通常情況下吕嘀,服務(wù)器和/或客戶端是處于內(nèi)網(wǎng)的违寞,對(duì)外網(wǎng)隱藏真實(shí)IP地址。因此HTTP請(qǐng)求就要通
過代理越過這個(gè)網(wǎng)絡(luò)屏障偶房。 - 會(huì)話
七坞靶、HTTP流(固定方向流動(dòng)數(shù)據(jù))
打開一個(gè)TCP連接:TCP連接被用來發(fā)送一條或多條請(qǐng)求,以及接受回應(yīng)消息蝴悉。
-
發(fā)送一個(gè)HTTP報(bào)文:HTTP報(bào)文(在HTTP/2之前)是語義可讀的。
GET/HTTP/1.1 Host: dexeloper.mozilla.org. Accept-Language: fr
-
讀取服務(wù)端返回的報(bào)文信息:
HTTP/1.1 200 OK Last-Modified: Tue,o1 Dec 2009 20:18:22 GMT Content-Length: 29769 Content-Type: text/html
關(guān)閉連接或者為后續(xù)請(qǐng)求重用連接瘾敢。
八拍冠、概述
請(qǐng)求通過一個(gè)實(shí)體被發(fā)出,實(shí)體也就是用戶代理簇抵。大多數(shù)情況下庆杜,這個(gè)用戶代理都是指瀏覽器。
每一個(gè)發(fā)送到服務(wù)器的請(qǐng)求碟摆,都會(huì)被服務(wù)器處理并返回一個(gè)消息晃财,也就是響應(yīng)。
在這個(gè)請(qǐng)求與回應(yīng)之間典蜕,還有許許多多的被稱為Proxies的實(shí)體断盛,他們的作用與表現(xiàn)各不相同。
- user-agent就是任何能夠?yàn)橛脩舭l(fā)起行為的工具愉舔。這個(gè)角色通常都是由劉覽器來扮演钢猛。一些例外情況,比如是工程師使用的程序轩缤,以及Web開發(fā)人員調(diào)試應(yīng)用程序命迈。
- 瀏覽器總是作為發(fā)起一個(gè)請(qǐng)求的實(shí)體(近幾年已經(jīng)出現(xiàn)一些機(jī)制能夠模擬由服務(wù)器發(fā)起的請(qǐng)求消息贩绕,例如Nodejs )。
-
瀏覽器首先發(fā)送一個(gè)請(qǐng)求來獲取頁面的HTML文檔壶愤,再解析文檔中的資源信息發(fā)送其他請(qǐng)求淑倾,獲取可執(zhí)行腳本或CSS樣式來進(jìn)行頁面布局渲染,以及一些其它頁面資源(如圖片和視頻等)征椒。然后娇哆,劉覽
器將這些資原整合到一起,展現(xiàn)出一個(gè)完整的文檔陕靠,也就是網(wǎng)頁迂尝。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-0NWggABq-1597411288425)(https://s1.ax1x.com/2020/08/14/dPN7zn.jpg)]
十、Web服務(wù)器
在HTTP協(xié)議通信過程的另一端剪芥,是由Web服務(wù)器來服務(wù)并提供客戶端所請(qǐng)求的文檔垄开。服務(wù)器只是虛擬意義上代表一個(gè)機(jī)器:它可以是共享負(fù)載(負(fù)載均衡)的一組服務(wù)器組成的計(jì)算機(jī)集群,也可以是一種復(fù)雜的軟件税肪,通過向其他計(jì)算機(jī)(如緩存溉躲,數(shù)據(jù)庫服務(wù)器,電子商務(wù)服務(wù)器等)發(fā)起請(qǐng)求來獲取部分或全部資源益兄。
Web服務(wù)不一定是一臺(tái)機(jī)器锻梳,但一個(gè)機(jī)器上可以裝載的眾多Web服務(wù)。
十一净捅、代理(Proxies)
在劉覽器和服務(wù)器之間疑枯,有許多計(jì)算機(jī)和其他設(shè)備轉(zhuǎn)發(fā)了HTTP消息。
由于Web棧層次結(jié)構(gòu)的原因蛔六,它們大多都出現(xiàn)在傳輸層荆永、網(wǎng)絡(luò)層和物理層上,對(duì)于HTTP應(yīng)用層而言就是透明的国章,雖然它們可能會(huì)對(duì)應(yīng)用層性能有重要影響具钥。還有一部分是表現(xiàn)在應(yīng)用層上的,被稱為代理(Proxies)液兽。
代理(Proxies)既可以表現(xiàn)得透明骂删,又可以不透明(“改變請(qǐng)求”會(huì)通過它們)。
代理主要有如下幾種作用:
- 緩存(可以是公開的也可以是私有的四啰,像瀏覽器的緩存)
- 過濾(像反病毒掃描宁玫,家長控制)心
- 負(fù)載均衡(讓多個(gè)服務(wù)器服務(wù)不同的請(qǐng)求)
- 認(rèn)證(對(duì)不同資原進(jìn)行權(quán)限管理)
以不透明(“改變請(qǐng)求”會(huì)通過它們)。
代理主要有如下幾種作用:
- 緩存(可以是公開的也可以是私有的柑晒,像瀏覽器的緩存)
- 過濾(像反病毒掃描撬统,家長控制)心
- 負(fù)載均衡(讓多個(gè)服務(wù)器服務(wù)不同的請(qǐng)求)
- 認(rèn)證(對(duì)不同資原進(jìn)行權(quán)限管理)
- 日志記錄(允許存儲(chǔ)歷史信息)