Hypertext transfer protocol
(簡(jiǎn)稱:HTTP
)超文本傳輸協(xié)議
叉袍。HTTP
是WWW
(world wide web 萬(wàn)維網(wǎng))在一個(gè)超文本
里面包含超鏈接
的數(shù)據(jù)通信的基礎(chǔ)锭沟。
HTTP
的發(fā)展起始于1989年被 Tim Berners-Lee
在 CERN
創(chuàng)立。HTTP標(biāo)準(zhǔn)的發(fā)展是被IEIF(Internet Engineering Task Force)
和W3C (world wide web consortium)
調(diào)整,并在提出 RFCs(request for comments)
后達(dá)到了頂點(diǎn)。
HTTP
的第一個(gè)修訂版HTTP/1.1
,在1997被廣泛應(yīng)用,不過(guò) 在 1999 年被 RFC 2616
廢棄,之后在2014年又出現(xiàn)了 RFC 7230
驾孔;
稍后芍秆,在2015年,提出了 繼任者HTTP/2(之后的繼任者是HTTP/3, 建立在 HTTP/2之上),現(xiàn)在被大部分主要的web服務(wù)器和瀏覽器通過(guò) TSL(Transport Layer Security 傳輸層安全協(xié)議)
使用ALPN (Application-Layer Protocol Negotiation 應(yīng)用層協(xié)議協(xié)商)
擴(kuò)展支持的翠勉。
1妖啥、技術(shù)介紹
HTTP
方法作為一個(gè)請(qǐng)求-響應(yīng)
在客戶端-服務(wù)器
計(jì)算模式。舉例对碌,比如一個(gè)web瀏覽器
,或者是一個(gè)客戶端
或應(yīng)用程序
運(yùn)行在擁有網(wǎng)站域名的電腦主機(jī)上
荆虱。客戶端發(fā)起一個(gè) HTTP request
請(qǐng)求朽们,提供資源比如 HTML或者其他資源或代表客戶機(jī)執(zhí)行其他行為的一個(gè)服務(wù)器
怀读,返回一個(gè)response message
響應(yīng)的消息給客戶端。返回的響應(yīng)信息
包含了請(qǐng)求的完整信息狀態(tài)和或許會(huì)包含請(qǐng)求的內(nèi)容
骑脱。
瀏覽器就是一個(gè)用戶代理(user agent 簡(jiǎn)稱 UA
)菜枷。其他的用戶代理包括,搜索提供服務(wù)的索引瀏覽器(web爬蟲)叁丧,語(yǔ)音瀏覽器啤誊,移動(dòng)apps
和其他軟件,訪問拥娄、消耗或者展示 網(wǎng)頁(yè)內(nèi)容蚊锹。
HTTP被設(shè)計(jì)去允許網(wǎng)絡(luò)中間件元素去提高或者加強(qiáng)客戶端和服務(wù)器之間的通信。高并發(fā)的網(wǎng)站經(jīng)常受益在那些傳遞在上層服務(wù)器提高響應(yīng)時(shí)間的web cache(網(wǎng)頁(yè)緩存)
上条舔。網(wǎng)頁(yè)瀏覽器緩存之前獲取到的資源然后再減少網(wǎng)絡(luò)擁堵的時(shí)候重復(fù)使用這些資源枫耳。在私有網(wǎng)絡(luò)邊界的HTTP代理服務(wù)器能夠促進(jìn)和通過(guò)額外的服務(wù)器傳遞消息的客戶端的通信。
HTTP
是一個(gè)設(shè)計(jì)在互聯(lián)網(wǎng)協(xié)議套件
(Internet protocol suite
)里的一個(gè)應(yīng)用層協(xié)議孟抗。它的定義內(nèi)容假一個(gè)潛在的可靠的傳輸層協(xié)議
(transport layer protocol 簡(jiǎn)稱 TLP
)和 傳輸控制協(xié)議
(Transmission Control Protocol 簡(jiǎn)稱 TCP
)被普遍應(yīng)用。然而钻心,HTTP可以被適用于不可靠額協(xié)議比如用戶數(shù)據(jù)報(bào)協(xié)議
(User Dategram Protocol 簡(jiǎn)稱 UDP)
,比如凄硼,HTTPU 通用即用即插
和簡(jiǎn)單的服務(wù)發(fā)現(xiàn)協(xié)議
(Simple Service Discovery Protocol 簡(jiǎn)稱 SSDP)。
HTTP資源利用URLs 統(tǒng)一資源存放器(Uniform Resource Locators)定義和存放在網(wǎng)絡(luò)上捷沸,利用URL‘s(Uniform Resource identifiers)統(tǒng)一資源標(biāo)識(shí)符 http 和 https摊沉。比如:包含所有的可選擇的組件:
[外鏈圖片轉(zhuǎn)存失敗(img-hsc38fMd-1564190968738)(assets/1559022847926.png)]
URLs在HTML 文檔中被解碼為超鏈接,所以成為了相關(guān)聯(lián)的超文本文檔痒给。
HTTP/1.1是在原來(lái)HTTP(HTTP/1.0)的一次版本更新说墨,在HTTP/1.0,每一次請(qǐng)求服務(wù)器資源苍柏,都要單獨(dú)發(fā)一次請(qǐng)求連接尼斧。在HTTP/1.1,可以在頁(yè)面被發(fā)布后,重復(fù)使用一個(gè)請(qǐng)求連接去請(qǐng)求下載圖片试吁,腳本和樣式表等棺棵。
2楼咳、歷史
術(shù)語(yǔ) hypertext
最早在1985年被Ted Nelson
提出,反而在1930年的 vannevar Bush
的基于微縮膠卷的信息檢索和管理的“memex
”系統(tǒng)所激勵(lì)烛恤。后來(lái)Berners-Lee
和他的團(tuán)隊(duì)發(fā)明的最初的HTTP
, 還有Html
和相關(guān)的網(wǎng)頁(yè)服務(wù)器和基于文本的網(wǎng)頁(yè)瀏覽器的相關(guān)的技術(shù)母怜,終于被認(rèn)可。
Broners-lee
在1989年 第一次提出了 “worldWideWeb
”項(xiàng)目缚柏,也就是現(xiàn)在著名的 World Wide Web
苹熏。第一個(gè)版本的協(xié)議只有一個(gè)方法:GET
, 可以從一個(gè)服務(wù)器請(qǐng)一個(gè)頁(yè)面,從服務(wù)器返回的一直是一個(gè)頁(yè)面币喧。
第一個(gè)注明的HTTP版本是 HTTP V0.9,
Dave Ragget
t 創(chuàng)建HTTP工作小組(HTTP WG
)柜裸,打算擴(kuò)大協(xié)議擴(kuò)展業(yè)務(wù),擴(kuò)大談判粱锐,豐富媒體元信息疙挺,嘗試使用一個(gè)安全協(xié)議,后來(lái)通過(guò)增加額外的方法和消息頭變得更加有效率怜浅。RFC 1945
官方介紹和發(fā)布認(rèn)證HTTP V1.0
在1996铐然;
HTTP WG
打算在1995年12月發(fā)布一些新的標(biāo)準(zhǔn)和對(duì)基于開發(fā)中的RFC2068
的預(yù)標(biāo)準(zhǔn)HTTP/1.1提供支持,并在1996早期就被大部分瀏覽器開發(fā)者適用認(rèn)可恶座。同年三月搀暑,預(yù)標(biāo)準(zhǔn) HTTP/1.1 被大部分瀏覽器支持。
發(fā)展歷程:
-
RFC 7230
, HTTP/1.1: Message Syntax and Routing -
RFC 7231
, HTTP/1.1: Semantics and Content -
RFC 7232
, HTTP/1.1: Conditional Requests -
RFC 7233
, HTTP/1.1: Range Requests -
RFC 7234
, HTTP/1.1: Caching -
RFC 7235
, HTTP/1.1: Authentication
HTTP/2
作為 RFC 7540
在2015年五月發(fā)布跨琳。
年份 | HTTP 版本 |
---|---|
1991 | 0.9 |
1996 | 1.0 |
1997 | 1.1 |
2015 | 2.0 |
2018 | 3.0 |
3自点、HTTP session 會(huì)話
一個(gè)HTTP回話是一系列網(wǎng)絡(luò)請(qǐng)求-響應(yīng)失誤。一個(gè)HTTP客戶端通過(guò)一個(gè)特殊的服務(wù)器端口(一般是80脉让,偶爾是8080)建立一個(gè)TCP 連接 桂敛。一個(gè)HTTP server 監(jiān)聽這個(gè)端口等待客戶端發(fā)出請(qǐng)求信息。一旦是收到請(qǐng)求溅潜,服務(wù)器返回一個(gè)狀態(tài)碼:比如 “HTTP/1.1 200 OK”
和它自己的消息术唬。此消息的正文一般是請(qǐng)求的資源,或者也許可能是一些錯(cuò)誤消息或者其他信息滚澜。
[外鏈圖片轉(zhuǎn)存失敗(img-vMsZD46g-1564190968740)(assets/1559027962666.png)]
3.1 持續(xù)連接
在 HTTP/0.9
和 1.0
粗仓,每一次單獨(dú)請(qǐng)求/響應(yīng)后,連接會(huì)被關(guān)閉设捐。在 HTTP/1.
1借浊,一個(gè) keep-alive-mechanism
保持存活機(jī)制被介紹,多次單個(gè)請(qǐng)求可以共用一個(gè)連接通道萝招。這樣的持續(xù)的連接明顯地減少請(qǐng)求延遲時(shí)間蚂斤,因?yàn)榭蛻舳嗽诘谝粋€(gè)請(qǐng)求發(fā)出去之后不需要重新談判和TCP進(jìn)行三次握手
的連接。一般的即寒,連接因?yàn)?code>TCP的slow-start
機(jī)制變得更加快速橡淆。
3.2 HTTP 會(huì)話狀態(tài)
HTTP是一個(gè)無(wú)狀態(tài)協(xié)議
召噩。一個(gè)無(wú)狀態(tài)的協(xié)議不會(huì)要求HTTP 服務(wù)器在多個(gè)請(qǐng)求中去保存每一個(gè)用戶的信息或者狀態(tài)。但是逸爵,一些網(wǎng)頁(yè)應(yīng)用程序?qū)崿F(xiàn)狀態(tài)或者服務(wù)器端會(huì)話用做HTTP cookie
或者隱藏在網(wǎng)頁(yè)表單
里的變量具滴。
4、HTTP authentication 認(rèn)證
HTTP 提供多種驗(yàn)證方案如:基本的 訪問驗(yàn)證
和 消化訪問驗(yàn)證
师倔,通過(guò)質(zhì)問-驗(yàn)證機(jī)制憑借服務(wù)器標(biāo)識(shí)符和在提供其請(qǐng)求內(nèi)容之前提出一個(gè)質(zhì)問權(quán)限的操作构韵。
Authentication realms 身份驗(yàn)證領(lǐng)域
HTTP
身份驗(yàn)證規(guī)范提供了一個(gè)任意的,實(shí)現(xiàn)指定的構(gòu)造趋艘,用于劃分單獨(dú)的資源到一個(gè)公共的給定的Root URL
; 這個(gè)realm
值是一個(gè)字符串疲恢,如果存在,一定是和規(guī)范的root URL
結(jié)合來(lái)保護(hù)空間抵抗挑戰(zhàn)瓷胧。在一個(gè)根目錄下显拳,可以單獨(dú)定義不同的認(rèn)證作用域。
5搓萧、Message format 消息格式
客戶端和服務(wù)器之間的通信靠發(fā)送純文本消息(ASCII)杂数。客戶端發(fā)送到服務(wù)器瘸洛,服務(wù)器發(fā)送響應(yīng)信息揍移;
5.1 request message 請(qǐng)求消息
請(qǐng)求的消息有以下組成部分:
- 一個(gè) 請(qǐng)求命令行 ,比如 (GET /images/logo.png HTTP/1.1)
- 請(qǐng)求頭 request header fields
- 一個(gè)空行
- 一個(gè)可選擇的消息正文