搬磚磷蜀,翻譯自原文https://dev.opera.com/articles/http-basic-introduction/
介紹
在不丹餐曹,當(dāng)人們見(jiàn)面是于颖,他們通常打招呼的方式是“你身體好嗎柏锄?”在日本他們獲取會(huì)鞠躬坪仇,視情況而定杂腰。在阿曼,人們經(jīng)常在握手后輕吻對(duì)方的鼻子椅文。在柬埔寨和泰國(guó)喂很,他們雙手合十像祈禱那樣。所有這些通信(交流)協(xié)議皆刺,一個(gè)簡(jiǎn)單的代碼序列都是有意義和準(zhǔn)備方進(jìn)行有意義的交換少辣。
在網(wǎng)絡(luò)上,我們有一個(gè)非常有小的應(yīng)用協(xié)議羡蛾,他為世界各地的電腦準(zhǔn)備有意義的交換:超文本傳輸協(xié)議(Hypertext Transfer Protocol)漓帅。HTTP是一個(gè)在TCP/IP之上的應(yīng)用級(jí)的協(xié)議,一個(gè)通信(交流)協(xié)議痴怨。在教web設(shè)計(jì)和開(kāi)發(fā)時(shí)忙干,HTTP似乎經(jīng)常被遺忘,這是一個(gè)遺憾:理解它將有主意定義更好的用戶(hù)交互腿箩,實(shí)現(xiàn)更好的站點(diǎn)性能豪直,并未管理網(wǎng)絡(luò)上的消息創(chuàng)建有效的工具。
這是一系列文章的第一篇珠移,目的是教HTTP基礎(chǔ)和我們?cè)鯓痈行У氖褂盟T谶@片文章我們將要看看HTTP適合于用在網(wǎng)絡(luò)機(jī)器哪里末融。
什么是一個(gè)通信協(xié)議钧惧?
在了解詳細(xì)之前,我們想象一下一個(gè)基本的交流情景勾习。為了能夠交流浓瞪,需要兩個(gè)部分(軟件,設(shè)備巧婶,人等等):
- 語(yǔ)法(數(shù)據(jù)格式和編碼)
- 語(yǔ)義(控制信息和錯(cuò)誤處理)
- 時(shí)間(速度匹配和排序)
當(dāng)2個(gè)人見(jiàn)面時(shí)乾颁,他們使用一種通信(交流)協(xié)議:例如,在日本艺栈,一個(gè)人會(huì)用身體做出具體的姿勢(shì)英岭。其中一種姿勢(shì)就是鞠躬,這就是交互中用到的“語(yǔ)法”湿右。在日本文化中诅妹,鞠躬的姿勢(shì)于問(wèn)候某人的“語(yǔ)義”相關(guān)。最后當(dāng)一個(gè)人向另一個(gè)人鞠躬時(shí),在特定的“時(shí)間內(nèi)”已經(jīng)在兩者之間建立了一系列的時(shí)間吭狡。
一個(gè)在線(xiàn)的通信協(xié)議包含一樣的元素尖殃。語(yǔ)法是字符的序列,比如我們用于編寫(xiě)協(xié)議的關(guān)鍵字划煮,語(yǔ)義是與這些關(guān)鍵字相關(guān)聯(lián)的意義送丰,最后時(shí)間是兩個(gè)或多個(gè)實(shí)體交換這些關(guān)鍵字的順序。
HTTP適用于機(jī)器的什么地方呢弛秋?
HTTP 運(yùn)行于其他協(xié)議之上蚪战。等連接到到一個(gè)網(wǎng)站時(shí),比如www.example.org铐懊,用戶(hù)代理使用TCP/IP協(xié)議套件邀桑,TCP/IP模型設(shè)計(jì)與1970,有四個(gè)不同的層面:
- Link 描述了對(duì)物理媒介的訪(fǎng)問(wèn)(如:使用網(wǎng)卡)
- Internet 描述了對(duì)數(shù)據(jù)的封裝和路由 — 它是怎么包裝的(IP)
- Transport 描述數(shù)據(jù)從起點(diǎn)傳遞到最終目的地的方式(TCP,UDP)
- Application 描述了傳輸?shù)男畔⒌囊饬x或者格式(HTTP)
HTTP 是一個(gè)位于通信協(xié)議之上的應(yīng)用協(xié)議(application protocol)科乎。記住這一點(diǎn)很重要壁畸。將模型分離為獨(dú)立的層有助于發(fā)展平臺(tái)的各個(gè)部分,而不必重寫(xiě)所有內(nèi)容茅茂。比如捏萍,TCP,一個(gè)傳輸協(xié)議空闲,可以不用去修改應(yīng)用協(xié)議HTTP就能發(fā)展令杈。在實(shí)踐中,當(dāng)我們追求高性能通信時(shí)碴倾,這些細(xì)節(jié)變得有點(diǎn)難看逗噩。在前幾篇HTTP文章中,我們將重點(diǎn)討論在TCP/IP模型中定義的層的分離跌榔。HTTP被定義為通過(guò)HTTP消息在兩個(gè)軟件之間通信信息异雁。我們塑造和設(shè)計(jì)這些消息的方式會(huì)對(duì)客戶(hù)端(例如瀏覽器)、服務(wù)器(web站點(diǎn))及其中介(代理)產(chǎn)生影響僧须。
讓我們?cè)L問(wèn)服務(wù)器
端口80是連接到Web服務(wù)器的默認(rèn)端口.我們可以自己用shell試試纲刀。打開(kāi)命令行,用一下的命令担平,嘗試打開(kāi)一個(gè)連接到www.opera.com 的80端口
telnet www.opera.com 80
你會(huì)得到像下面的輸出:
Trying 195.189.143.147...
Connected to front.opera.com.
Escape character is '^]'.
Connection closed by foreign host
我們可以看到終端正在嘗試與位于IP地址195.189.143.147的服務(wù)器進(jìn)行通信示绊。如果我們不做任何其他事情,服務(wù)器將自己關(guān)閉連接暂论。使用不同的端口和不同的通信協(xié)議是完全可能的面褐,但這些是最常見(jiàn)的。
讓我們講一點(diǎn)HTTP
步驟1:用win + r 打開(kāi)cmd
步驟2:在cmd中執(zhí)行www.opera.com 80
空另, 然后可以看到一個(gè)黑色的框框
步驟3: 然后按 ctrl + ], 退出盆耽, 結(jié)果為:
歡迎使用 Microsoft Telnet Client
Escape 字符是 'CTRL+]'
Microsoft Telnet>
步驟4: 然后按enter, 進(jìn)入到輸入框, 又是黑漆漆的一片
步驟5:輸入如下內(nèi)容(有時(shí)間限制, 所以最好是先寫(xiě)好摄杂, 然后整體拷貝進(jìn)去)
GET / HTTP/1.1
Host: www.opera.com
這個(gè)消息指定了:
- GET:我們希望去獲取消息的代表坝咐。
- /:我們希望獲取存在站點(diǎn)根目錄下的信息。
- HTTP/1.1 我們使用的是HTTP 1.1版本析恢。
- 我正在嘗試訪(fǎng)問(wèn)一個(gè)具體的網(wǎng)站墨坚。
- www.opera.com :網(wǎng)站的名稱(chēng)
步驟6:然后連續(xù)按兩下enter鍵盤(pán), 得到的結(jié)果為:
HTTP/1.1 200 OK
Date: Wed, 23 Nov 2011 19:41:37 GMT
Server: Apache
Content-Type: text/html; charset=utf-8
Set-Cookie: language=none; path=/; domain=www.opera.com; expires=Thu, 25-Aug-2011 19:41:38 GMT
Set-Cookie: language=en; path=/; domain=.opera.com; expires=Sat, 20-Nov-2021 19:41:38 GMT
Vary: Accept-Encoding
Transfer-Encoding: chunked
<!DOCTYPE html>
<html lang="en">
…
這里服務(wù)器說(shuō):“我說(shuō)的是HTTP 1.1版本映挂。你的請(qǐng)求成功了泽篮,所以我回復(fù)了代碼200。OK字符串是可選的柑船,用來(lái)解釋這段代碼對(duì)人類(lèi)的意義——在這種情況下帽撑,一切正常,我們的消息被接受了鞍时。然后發(fā)送一系列HTTP頭來(lái)描述消息是什么亏拉,以及應(yīng)該如何理解它。最后逆巍,包含位于站點(diǎn)根目錄的頁(yè)面內(nèi)容及塘,以<!DOCTYPE html >。下面幾篇文章將解釋HTTP謂詞和代碼列表锐极。
總結(jié)
我們剛剛談了HTTP -它是如此簡(jiǎn)單!我們發(fā)送了一個(gè)信息(就像寫(xiě)信一樣)笙僚,我們收到了一個(gè)答復(fù),因?yàn)槲覀兊男畔⒈焕斫饬肆樵佟O麓挝覀儗⒃敿?xì)探討這些標(biāo)題的含義以及它們可以用于什么