HTTP(HyperText Transfer Protocol)是萬(wàn)維網(wǎng)(World Wide Web)的基礎(chǔ)協(xié)議。
1989 年,當(dāng)時(shí)在 CERN 工作的 Tim Berners-Lee 博士寫(xiě)了一份關(guān)于建立一個(gè)通過(guò)網(wǎng)絡(luò)傳輸超文本系統(tǒng)的報(bào)告。這個(gè)系統(tǒng)起初被命名為 Mesh。
Tim Berners-Lee 對(duì)于 Web 的最初設(shè)想不是一個(gè)只讀媒體,是可以遠(yuǎn)程添加或移動(dòng)文檔,是一種分布式文件系統(tǒng)。
1990 年項(xiàng)目實(shí)施期間被更名為萬(wàn)維網(wǎng)(World Wide Web)?;诂F(xiàn)有的TCP 和 IP 協(xié)議基礎(chǔ)建立。由四部分組件
- 超文本標(biāo)記語(yǔ)言:用來(lái)表示超文本文檔的文本格式,
- 超文本傳輸協(xié)議:用來(lái)交換超文本文檔的簡(jiǎn)單協(xié)議,
- 網(wǎng)絡(luò)瀏覽器: 顯示(以及編輯)超文本文檔的客戶端。(第一個(gè)網(wǎng)絡(luò)瀏覽器被稱為 WorldWideWeb)
- 服務(wù)器用于提供可訪問(wèn)的文檔,即 httpd 的前身
1991 年 8 月 16 日,Tim Berners-Lee 在公開(kāi)的超文本新聞組上發(fā)表的文章被視為是萬(wàn)維網(wǎng)公共項(xiàng)目的開(kāi)始。此時(shí)的 HTTP 被稱為 HTTP/0.9,又被稱為 單行(one-line)協(xié)議。
1994 年底, 網(wǎng)景公司在TCP/IP 協(xié)議基礎(chǔ)上創(chuàng)建了一個(gè)額外的加密傳輸層:SSL。
- SSL 1.0 沒(méi)有在公司以外發(fā)布過(guò)
- SSL 2.0 及其后繼者 SSL 3.0 允許通過(guò)加密來(lái)保證服務(wù)器和客戶端之間交換消息的真實(shí)性,來(lái)創(chuàng)建電子商務(wù)網(wǎng)站。
- SSL 在標(biāo)準(zhǔn)化道路上最終成為了 TLS
HTTP/0.9——單行協(xié)議
最初版本的 HTTP 協(xié)議并沒(méi)有版本號(hào),后來(lái)它的版本號(hào)被定位在 0.9 以區(qū)分后來(lái)的版本。HTTP/0.9 的響應(yīng)內(nèi)容并不包含 HTTP 頭,無(wú)法傳輸其他類型的文件。也沒(méi)有狀態(tài)碼或錯(cuò)誤代碼。
出現(xiàn)問(wèn)題會(huì)響應(yīng)一個(gè)包含問(wèn)題描述的 HTML 文件
-
請(qǐng)求報(bào)文
- 以唯一可用方法 GET 開(kāi)頭
- 目標(biāo)資源的路徑(連接到服務(wù)器,協(xié)議、服務(wù)器、端口號(hào)這些都不是必須的)
GET /mypage.html
-
響應(yīng)報(bào)文
- 只包含響應(yīng)文檔本
<html>
這是一個(gè)非常簡(jiǎn)單的 HTML 頁(yè)面
</html>
HTTP/1.0——構(gòu)建可擴(kuò)展性
- 增加版本協(xié)議:協(xié)議版本信息現(xiàn)在會(huì)隨著每個(gè)請(qǐng)求發(fā)送(HTTP/1.0 被追加到了 GET 行)
- 增加狀態(tài)碼:狀態(tài)碼會(huì)在響應(yīng)開(kāi)始時(shí)發(fā)送
- 增加 HTTP 標(biāo)頭
在 1991-1995 年,這些新擴(kuò)展并沒(méi)有被引入到標(biāo)準(zhǔn)中,只作為一種嘗試。。
服務(wù)器和瀏覽器添加這些新擴(kuò)展功能,出現(xiàn)了大量的互操作問(wèn)題。
此時(shí) HTTP/1.0 具備了傳輸其他類型文檔的能力。
請(qǐng)求獲取圖片
GET /myimage.gif HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
200 OK
Date: Tue, 15 Nov 1994 08:12:32 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif
(這里是圖片內(nèi)容)
1996 年 11 月,HTTP 被擴(kuò)展到允許創(chuàng)作,并且創(chuàng)建了一個(gè)名為 WebDAV 的標(biāo)準(zhǔn)。 并且解決之前已知問(wèn)題,發(fā)表了 RFC 1945。用以描述如何操作實(shí)踐這些新擴(kuò)展功能。但它不是官方標(biāo)準(zhǔn)。
1997 年初,HTTP1.1 標(biāo)準(zhǔn)發(fā)布。HTTP/1.1 在 1997 年 1 月以 RFC 2068 文件發(fā)布。
HTTP/1.1——標(biāo)準(zhǔn)化的協(xié)議
HTTP/1.1 消除了大量歧義內(nèi)容并引入了多項(xiàng)改進(jìn):
- 連接可以復(fù)用,節(jié)省了多次打開(kāi) TCP 連接加載網(wǎng)頁(yè)文檔資源的時(shí)間
- 增加管線化技術(shù),允許在第一個(gè)應(yīng)答被完全發(fā)送之前就發(fā)送第二個(gè)請(qǐng)求,以降低通信延遲
- 支持響應(yīng)分塊
- 引入額外的緩存控制機(jī)制
- 引入內(nèi)容協(xié)商機(jī)制,包括語(yǔ)言、編碼、類型等。并允許客戶端和服務(wù)器之間約定以最合適的內(nèi)容進(jìn)行交換
- 憑借 Host 標(biāo)頭,能夠使不同域名配置在同一個(gè) IP 地址的服務(wù)器上
一個(gè)典型的請(qǐng)求流程,所有請(qǐng)求都通過(guò)一個(gè)連接實(shí)現(xiàn),看起來(lái)就像這樣:
GET /zh-CN/docs/Glossary/Simple_header HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/zh-CN/docs/Glossary/Simple_header
200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 20 Jul 2016 10:55:30 GMT
Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a"
Keep-Alive: timeout=5, max=1000
Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT
Server: Apache
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
(content)
GET /static/img/header-background.png HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/zh-CN/docs/Glossary/Simple_header
200 OK
Age: 9578461
Cache-Control: public, max-age=315360000
Connection: keep-alive
Content-Length: 3077
Content-Type: image/png
Date: Thu, 31 Mar 2016 13:34:46 GMT
Last-Modified: Wed, 21 Oct 2015 18:27:50 GMT
Server: Apache
(image content of 3077 bytes)
1999 年 6 月, HTTP/1.1 協(xié)議修訂,發(fā)布 RFC 2616
2000 年,一種新的使用 HTTP 的模式被設(shè)計(jì)出來(lái):具象狀態(tài)傳輸(representational state transfer) (或者說(shuō) REST)。
具象狀態(tài)傳輸(REST)
REST(Representational State Transfer,表現(xiàn)層狀態(tài)轉(zhuǎn)換)是一組軟件架構(gòu)設(shè)計(jì)規(guī)范,可實(shí)現(xiàn)高效、可靠和可拓展的分布式系統(tǒng)。
REST 的基本概念是資源(resource),例如文件能通過(guò)明確和標(biāo)準(zhǔn)的操作與格式,轉(zhuǎn)換其狀態(tài)與超文本的關(guān)系。通常在 API’s 或服務(wù)能直接修改文件的類型,而非觸發(fā)其他行為時(shí),它們就稱自己為 RESTful。
由于萬(wàn)維網(wǎng) Web 背后的 HTTP 協(xié)議也能傳輸文件和超文本鏈接,同時(shí)又充當(dāng)了標(biāo)準(zhǔn),簡(jiǎn)易的 HTTP API 雖然有時(shí)不一定遵守所有的 RESTful 規(guī)范,但它們還是會(huì)被稱為 RESTful API、RESTful 服務(wù),或者直接叫 REST 服務(wù)。初學(xué)者可以先假設(shè) REST API 代表一個(gè)能通過(guò)標(biāo)準(zhǔn) web 庫(kù)和工具調(diào)用的 HTTP 服務(wù)。
遵循 REST 規(guī)范的 API 只能通過(guò)使用基本的 HTTP / 1.1 方法訪問(wèn)特定的 URI。允許任何 Web 應(yīng)用程序通過(guò)提供 API 以允許查看和修改其數(shù)據(jù),而無(wú)需更新瀏覽器或服務(wù)器。所有需要的內(nèi)容都被嵌入到由網(wǎng)站通過(guò)標(biāo)準(zhǔn) HTTP/1.1 提供的文件中。
RESTful API 在 2010 年變得非常流行
-
REST 模型的缺點(diǎn)
- 每個(gè)網(wǎng)站都定義了自己的非標(biāo)準(zhǔn) RESTful API,并對(duì)其進(jìn)行了全面的控制。
自 2005 年以來(lái),可用于 Web 頁(yè)面的 API 大大增加,其中幾個(gè) API 為特定目的擴(kuò)展了 HTTP 協(xié)議,大部分是新的特定 HTTP 頭:
- Server-sent events,服務(wù)器可以偶爾推送消息到瀏覽器。
- WebSocket,一個(gè)新協(xié)議,可以通過(guò)升級(jí)現(xiàn)有 HTTP 協(xié)議來(lái)建立。
2014 年 6 月,HTTP/1.1 協(xié)議再次修訂,發(fā)布 RFC 7230-RFC 7235
2016 年,HTTP 的新擴(kuò)展:
- 對(duì) Alt-Svc 的支持
- 允許了給定資源的位置和資源鑒定
- 允許了更智能的 CDN 緩沖機(jī)制。
-
引入客戶端提示(client hint)
- 允許瀏覽器或者客戶端來(lái)主動(dòng)交流它的需求,或者是硬件約束的信息給服務(wù)端。
- Cookie 頭中引入安全相關(guān)的的前綴
- 可以保證一個(gè)安全的 Cookie 沒(méi)被更改過(guò)。
HTTP/2——為了更優(yōu)異的表現(xiàn)
HTTP/1.1 鏈接需要請(qǐng)求以正確的順序發(fā)送,理論上可以用一些并行的鏈接(尤其是 5 到 8 個(gè)),帶來(lái)的成本和復(fù)雜性堪憂。比如,HTTP 管線化(pipelining)就成為了 Web 開(kāi)發(fā)的負(fù)擔(dān)。
在 2010 年,谷歌通過(guò)實(shí)踐了一個(gè)實(shí)驗(yàn)性的 SPDY 協(xié)議。明確了響應(yīng)數(shù)量的增加和解決復(fù)雜的數(shù)據(jù)傳輸,SPDY 成為了 HTTP/2 協(xié)議的基礎(chǔ)。
在2015 年 5 月正式標(biāo)準(zhǔn)化
在 2022 年 1 月達(dá)到峰值,占所有網(wǎng)站的 46.9%文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-815533.html
-
HTTP/2 在 HTTP/1.1區(qū)別
- HTTP/2 是二進(jìn)制協(xié)議而不是文本協(xié)議。
- 不可讀,
- 不可無(wú)障礙的手動(dòng)創(chuàng)建,改善的優(yōu)化技術(shù)現(xiàn)在可被實(shí)施。
- HTTP/2 是多路復(fù)用協(xié)議。
- 并行的請(qǐng)求可以在同一個(gè)鏈接中處理
- 移除了 HTTP/1.x 中順序和阻塞的約束。
- 壓縮標(biāo)頭。
- 因?yàn)闃?biāo)頭在一系列請(qǐng)求中常常是相似的,移除了重復(fù)和傳輸重復(fù)數(shù)據(jù)的成本。
- 允許服務(wù)器在客戶端緩存中填充數(shù)據(jù),通過(guò)服務(wù)器推送的機(jī)制來(lái)提前請(qǐng)求。
- HTTP/2 是二進(jìn)制協(xié)議而不是文本協(xié)議。
HTTP/3——基于 QUIC 的 HTTP
HTTP/3在傳輸層部分使用 QUIC (en-US)。QUIC 旨在為 HTTP 連接設(shè)計(jì)更低的延遲。QUIC 通過(guò) UDP 運(yùn)行多個(gè)流,并為每個(gè)流獨(dú)立實(shí)現(xiàn)數(shù)據(jù)包丟失檢測(cè)和重傳。如果發(fā)生錯(cuò)誤,只有該數(shù)據(jù)包中包含數(shù)據(jù)的流才會(huì)被阻止。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-815533.html
到了這里,關(guān)于HTTP 第二章 發(fā)展歷史的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!