網(wǎng)絡(luò)傳輸協(xié)議概念
網(wǎng)絡(luò)傳輸協(xié)議或簡稱為傳送協(xié)議,是指計(jì)算機(jī)通信或網(wǎng)絡(luò)設(shè)備的共同語言。現(xiàn)在最普及的計(jì)算機(jī)通信為網(wǎng)絡(luò)通信,所以“傳送協(xié)議”一般都指計(jì)算機(jī)通信的傳送協(xié)議仰美,如:TCP/IP妻率、NetBEUI、DHCP、FTP绪妹、HTTP等甥桂。然而,傳送協(xié)議也存在于計(jì)算機(jī)的其他形式通信邮旷,例如:面向?qū)ο缶幊汤锩鎸?duì)象之間的通信黄选;操作系統(tǒng)內(nèi)不同程序之間的消息,都需要有一個(gè)傳送協(xié)議婶肩,以確保傳信雙方能夠溝通無間办陷。
放在現(xiàn)實(shí)中的協(xié)議也有很多,這個(gè)協(xié)議是,相互遵守,單方面違背了,不叫協(xié)議,比如停戰(zhàn)協(xié)議,全球貿(mào)易協(xié)議等等.沒有協(xié)議,世界將一片混亂.
當(dāng)然以上例子只列舉了幾個(gè),如果想了解更多網(wǎng)絡(luò)傳輸協(xié)議,請(qǐng)參考維基百科關(guān)鍵詞:網(wǎng)絡(luò)傳輸協(xié)議.
HTTP協(xié)議
我們重點(diǎn)了解一下平時(shí)上網(wǎng)玩網(wǎng)絡(luò)游戲等等都需要涉及到的HTTP協(xié)議.
HTTP協(xié)議中文名叫:超文本傳輸協(xié)議,HTTP是英文單詞HyperText Transfer Protocol開頭字母的縮寫.
它是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法律歼。通過HTTP或者HTTPS協(xié)議請(qǐng)求的資源由統(tǒng)一資源標(biāo)識(shí)符來標(biāo)識(shí)民镜。
該協(xié)議發(fā)展由蒂姆·伯納斯-李于1989年在歐洲核子研究組織所發(fā)起。由萬維網(wǎng)協(xié)會(huì)和互聯(lián)網(wǎng)工程任務(wù)組制定標(biāo)準(zhǔn)险毁,最終發(fā)布了一系列的RFC制圈,其中最著名的是1999年6月公布的 RFC 2616,定義了HTTP協(xié)議中現(xiàn)今廣泛使用的一個(gè)版本——HTTP 1.1辱揭。
協(xié)議概述
HTTP是一個(gè)客戶端終端(用戶)和服務(wù)器端(網(wǎng)站)請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)离唐。通過使用網(wǎng)頁瀏覽器、網(wǎng)絡(luò)爬蟲或者其它的工具问窃,客戶端發(fā)起一個(gè)HTTP請(qǐng)求到服務(wù)器上指定端口(默認(rèn)端口為80)亥鬓。我們稱這個(gè)客戶端為用戶代理程序。應(yīng)答的服務(wù)器上存儲(chǔ)著一些資源域庇,比如HTML文件和圖像嵌戈。我們稱這個(gè)應(yīng)答服務(wù)器為源服務(wù)器。在用戶代理和源服務(wù)器中間可能存在多個(gè)“中間層”听皿,比如代理服務(wù)器熟呛、網(wǎng)關(guān)或者隧道。
盡管TCP/IP協(xié)議是互聯(lián)網(wǎng)上最流行的應(yīng)用尉姨,HTTP協(xié)議中庵朝,并沒有規(guī)定必須使用它或它支持的層。事實(shí)上又厉,HTTP可以在任何互聯(lián)網(wǎng)協(xié)議上九府,或其他網(wǎng)絡(luò)上實(shí)現(xiàn)。HTTP假定其下層協(xié)議提供可靠的傳輸覆致。因此侄旬,任何能夠提供這種保證的協(xié)議都可以被其使用。因此也就是其在TCP/IP協(xié)議族使用TCP作為其傳輸層煌妈。
通常儡羔,由HTTP客戶端發(fā)起一個(gè)請(qǐng)求宣羊,創(chuàng)建一個(gè)到服務(wù)器指定端口(默認(rèn)是80端口)的TCP連接。HTTP服務(wù)器則在那個(gè)端口監(jiān)聽客戶端的請(qǐng)求汰蜘。一旦收到請(qǐng)求仇冯,服務(wù)器會(huì)向客戶端返回一個(gè)狀態(tài),比如"HTTP/1.1 200 OK"鉴扫,以及返回的內(nèi)容赞枕,如請(qǐng)求的文件澈缺、錯(cuò)誤消息坪创、或者其它信息。
請(qǐng)求信息
發(fā)出的請(qǐng)求信息包括如下:
請(qǐng)求行(例如:GET /images/log.png HTTP/1.1) --> 表示從哪個(gè)目錄中用什么樣的標(biāo)準(zhǔn)用什么樣的方式請(qǐng)求log.png
請(qǐng)求頭(格式key:value)
空行
其他信息體
例如:
POST /01/01/php HTTP/1.1
Host:localhost
Content-type:
application/x-www-form-urlencode
Content-length:5
age=3
請(qǐng)求方法
HTTP/1.1協(xié)議中共定義了八種方法(也叫“動(dòng)作”)來以不同方式操作指定的資源:
OPTIONS:這個(gè)方法可使服務(wù)器傳回該資源所支持的所有HTTP請(qǐng)求方法姐赡。用'*'來代替資源名稱莱预,向Web服務(wù)器發(fā)送OPTIONS請(qǐng)求,可以測試服務(wù)器功能是否正常運(yùn)作项滑。
HEAD:與GET方法一樣依沮,都是向服務(wù)器發(fā)出指定資源的請(qǐng)求。只不過服務(wù)器將不傳回資源的本文部分枪狂。它的好處在于危喉,使用這個(gè)方法可以在不必傳輸全部內(nèi)容的情況下,就可以獲取其中“關(guān)于該資源的信息”(元信息或稱元數(shù)據(jù))州疾。
GET:向指定的資源發(fā)出“顯示”請(qǐng)求辜限。使用GET方法應(yīng)該只用在讀取數(shù)據(jù),而不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中严蓖,例如在Web Application中薄嫡。其中一個(gè)原因是GET可能會(huì)被網(wǎng)絡(luò)蜘蛛等隨意訪問。
POST:向指定資源提交數(shù)據(jù)颗胡,請(qǐng)求服務(wù)器進(jìn)行處理(例如提交表單或者上傳文件)毫深。數(shù)據(jù)被包含在請(qǐng)求本文中。這個(gè)請(qǐng)求可能會(huì)創(chuàng)建新的資源或修改現(xiàn)有資源毒姨,或二者皆有哑蔫。
PUT:向指定資源位置上傳其最新內(nèi)容。
DELETE:請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源弧呐。
TRACE:回顯服務(wù)器收到的請(qǐng)求闸迷,主要用于測試或診斷。
CONNECT:HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器泉懦。通常用于SSL加密服務(wù)器的鏈接(經(jīng)由非加密的HTTP代理服務(wù)器)稿黍。
方法名稱是區(qū)分大小寫的。當(dāng)某個(gè)請(qǐng)求所針對(duì)的資源不支持對(duì)應(yīng)的請(qǐng)求方法的時(shí)候崩哩,服務(wù)器應(yīng)當(dāng)返回狀態(tài)碼405(Method Not Allowed)巡球,當(dāng)服務(wù)器不認(rèn)識(shí)或者不支持對(duì)應(yīng)的請(qǐng)求方法的時(shí)候言沐,應(yīng)當(dāng)返回狀態(tài)碼501(Not Implemented)。
HTTP服務(wù)器至少應(yīng)該實(shí)現(xiàn)GET和HEAD方法酣栈,其他方法都是可選的险胰。當(dāng)然,所有的方法支持的實(shí)現(xiàn)都應(yīng)當(dāng)匹配下述的方法各自的語義定義矿筝。此外起便,除了上述方法,特定的HTTP服務(wù)器還能夠擴(kuò)展自定義的方法窖维。例如:
PATCH:用于將局部修改應(yīng)用到資源榆综。
響應(yīng)信息
服務(wù)器響應(yīng)回來的信息如下:
響應(yīng)行(協(xié)議 狀態(tài)嗎 狀態(tài)文字)
響應(yīng)頭信息(格式為 key:value)
空行
主體信息(也可以沒有)
例如:
HTTP/1.1 200 OK
Content-type:text/html
Content-length:5
hello
所有HTTP響應(yīng)的第一行都是狀態(tài)行,依次是當(dāng)前HTTP版本號(hào)铸史,3位數(shù)字組成的狀態(tài)代碼鼻疮,以及描述狀態(tài)的短語,彼此由空格分隔琳轿。
狀態(tài)代碼的第一個(gè)數(shù)字代表當(dāng)前響應(yīng)的類型:
1xx消息——請(qǐng)求已被服務(wù)器接收判沟,繼續(xù)處理
2xx成功——請(qǐng)求已成功被服務(wù)器接收、理解崭篡、并接受
3xx重定向——需要后續(xù)操作才能完成這一請(qǐng)求
4xx請(qǐng)求錯(cuò)誤——請(qǐng)求含有詞法錯(cuò)誤或者無法被執(zhí)行
5xx服務(wù)器錯(cuò)誤——服務(wù)器在處理某個(gè)正確請(qǐng)求時(shí)發(fā)生錯(cuò)誤
雖然 RFC 2616 中已經(jīng)推薦了描述狀態(tài)的短語挪哄,例如"200 OK","404 Not Found"琉闪,但是WEB開發(fā)者仍然能夠自行決定采用何種短語迹炼,用以顯示本地化的狀態(tài)描述或者自定義信息。