HTTP协议快速入门
一、定義
The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web. Hypertext is structured text that uses logical links (hyperlinks) between nodes containing text. HTTP is the protocol to exchange or transfer hypertext. -- wikipedia
從HTTP的定義可以看出,HTTP協(xié)議是互聯(lián)網(wǎng)上進(jìn)行數(shù)據(jù)通信的基礎(chǔ)協(xié)議,用來(lái)交換或傳輸超文本。超文本是一種結(jié)構(gòu)化的文本,在包含文本的節(jié)點(diǎn)之間使用邏輯鏈接(也叫超鏈接)。
二、概述
HTTP是基于TCP/IP協(xié)議的應(yīng)用層協(xié)議。HTTP允許進(jìn)行客戶端和服務(wù)器之間的通信。通過(guò)HTTP或HTTPS請(qǐng)求的資源由URI(統(tǒng)一資源標(biāo)識(shí)符)或URL(統(tǒng)一資源定位符)來(lái)標(biāo)識(shí)。
在客戶端-服務(wù)器的模式中,HTTP扮演著請(qǐng)求-響應(yīng)協(xié)議的角色。客戶端(通常是瀏覽器)提交HTTP請(qǐng)求消息給服務(wù)器。服務(wù)器可以提供HTML文件或其他類型的資源,或者代表客戶端執(zhí)行操作,返回響應(yīng)消息給客戶端。響應(yīng)包含關(guān)于請(qǐng)求的完整狀態(tài)信息。
三、歷史
1、HTTP/0.9
該版本于1991年發(fā)布。
- 只接受GET一種請(qǐng)求方法,沒有指定版本號(hào),且不支持請(qǐng)求頭。
- 服務(wù)器只能返回HTML格式的字符串。
2、HTTP/1.0
該版本于1996年發(fā)布。
- 除了GET方法,還新增了POST和HEAD。任何格式的內(nèi)容都可以發(fā)送。
- 請(qǐng)求和響應(yīng)的格式,除了數(shù)據(jù)部分,還包括頭信息,用來(lái)描述元數(shù)據(jù)。
- 新增了狀態(tài)碼、多字符集支持、權(quán)限、緩存、內(nèi)容編碼等功能。
3、HTTP/1.1
該版本于1997年發(fā)布。對(duì)1.0版本進(jìn)行了修訂和完善,并一直沿用至今。
- 新增了PUT、PATCH、OPTIONS、DELETE等方法。
- 客戶端請(qǐng)求的頭信息新增了Host字段,用來(lái)指定服務(wù)器的域名,這樣就可以將請(qǐng)求發(fā)往同一臺(tái)服務(wù)器的不同網(wǎng)站。
- 新增了持久連接,可以被多個(gè)請(qǐng)求多次使用。
- 新增了管道機(jī)制,在同一個(gè)TCP連接里,客戶端可以同時(shí)發(fā)送多個(gè)請(qǐng)求,但服務(wù)器還是按照順序進(jìn)行響應(yīng)。
- 使用Content-Length聲明本次響應(yīng)的數(shù)據(jù)長(zhǎng)度,以區(qū)分多個(gè)響應(yīng)。
4、HTTP/2
該版本于2015年發(fā)布。
- 頭信息和數(shù)據(jù)都是二進(jìn)制,統(tǒng)稱為幀。對(duì)頭信息進(jìn)行了壓縮。
- 在一個(gè)TCP連接中,客戶端可以同時(shí)發(fā)送多個(gè)請(qǐng)求或接收響應(yīng),不需要按照順序一一對(duì)應(yīng)。
- 將每個(gè)請(qǐng)求或響應(yīng)的所有數(shù)據(jù)包稱為一個(gè)數(shù)據(jù)流,在發(fā)送數(shù)據(jù)包的時(shí)候必須標(biāo)記屬于哪個(gè)數(shù)據(jù)流。
- 允許服務(wù)器主動(dòng)向客戶端推送,發(fā)送資源。
四、格式
每個(gè)HTTP請(qǐng)求和響應(yīng)都遵循相同的格式,包含請(qǐng)求行/狀態(tài)行、消息頭(Header)和消息體(Body),其中消息體是可選的。
- 消息頭包含若干屬性,但要保證一行只有一個(gè)屬性,并且必須以\r\n(回車換行)結(jié)尾。
- 當(dāng)遇到空行時(shí),后面的數(shù)據(jù)全屬于消息體。
五、HTTP請(qǐng)求
1、請(qǐng)求行
GET / HTTP/1.1其中,GET表示請(qǐng)求方法;/表示請(qǐng)求資源的路徑;HTTP/1.1表示協(xié)議版本。
2、請(qǐng)求方法
用來(lái)表明對(duì)指定資源的操作方式。常用的請(qǐng)求方法有:
- OPTIONS,返回服務(wù)器針對(duì)特定資源所支持的HTTP請(qǐng)求方法。
- HEAD,與GET請(qǐng)求一致,只不過(guò)不會(huì)返回響應(yīng)體。
- GET,請(qǐng)求指定的資源。
- POST,向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求,數(shù)據(jù)包含在請(qǐng)求體中,可能會(huì)導(dǎo)致新資源的創(chuàng)建或已有資源的修改。
- PUT,向指定資源位置上傳最新內(nèi)容。
- DELETE,請(qǐng)求服務(wù)器刪除所標(biāo)識(shí)的資源。
GET和POST方法的主要區(qū)別:
- GET提交的數(shù)據(jù)會(huì)放在URL之后,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連。POST把提交的數(shù)據(jù)放在Body中。
- GET提交的數(shù)據(jù)大小最多1024字節(jié)。POST提交的數(shù)據(jù)大小沒有限制。
- GET提交數(shù)據(jù)時(shí),會(huì)出現(xiàn)在URL上。POST則不會(huì)出現(xiàn)在URL上。
3、請(qǐng)求頭
是對(duì)請(qǐng)求的一種限定,包含很多屬性。常用的屬性有:
- Accept,客戶端可以接受的MIME類型。
- Accept-Encoding,客戶端可以接受的數(shù)據(jù)壓縮格式。
- Accept-Charset,客戶端可以接受的字符集編碼。
- Accept-Language,客戶端可以接受的語(yǔ)言。
- User-Agent,客戶端的一些基本信息,如使用的操作系統(tǒng)和瀏覽器的名稱和版本等。
- Content-Type,表示請(qǐng)求中的媒體類型信息。
- Content-Length,表示請(qǐng)求消息體的長(zhǎng)度。
- Connection,指定是否繼續(xù)保持連接。
- Host,指定要訪問的虛擬主機(jī)名和端口號(hào)。
- Cookie,將cookie值發(fā)送給服務(wù)器。
- If-Modified-Since,緩存資源的最后獲取時(shí)間。
六、HTTP響應(yīng)
1、狀態(tài)行
HTTP/1.1 200 OK其中,HTTP/1.1表示協(xié)議版本;200表示狀態(tài)碼;OK是狀態(tài)說(shuō)明。
2、狀態(tài)碼
根據(jù)響應(yīng)結(jié)果的類型,大致分為以下幾類:
2.1 1XX(信息類)
該類型狀態(tài)碼表示接收到請(qǐng)求并且繼續(xù)處理。
- 100,客戶端必須繼續(xù)發(fā)出請(qǐng)求。
- 101,客戶端要求服務(wù)器根據(jù)請(qǐng)求轉(zhuǎn)換HTTP協(xié)議版本。
2.2 2XX(響應(yīng)成功)
該類型狀態(tài)碼表示動(dòng)作被成功接收、理解和接受。
- 200,表明該請(qǐng)求被成功地完成,所請(qǐng)求的資源發(fā)送到客戶端。
- 201,提示知道新文件的URL。
- 202,接受并處理,但處理未完成。
- 203,返回信息不確定或不完整。
- 204,收到請(qǐng)求,但返回信息為空。
- 205,服務(wù)器完成了請(qǐng)求,用戶必須復(fù)位當(dāng)前已經(jīng)瀏覽過(guò)的文件。
- 206,服務(wù)器已經(jīng)完成了部分用戶的GET請(qǐng)求。
2.3 3XX(重定向類)
該類型狀態(tài)碼表示為了完成指定的動(dòng)作,必須接受進(jìn)一步處理。
- 300,請(qǐng)求的資源可在多處獲得。
- 301,本網(wǎng)頁(yè)被永久性轉(zhuǎn)移到另一個(gè)URL。
- 302,請(qǐng)求的網(wǎng)頁(yè)被重定向到新的地址。
- 303,建議用戶訪問其他URL或訪問方式。
- 304,自從上次請(qǐng)求后,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò)。
- 305,請(qǐng)求的資源必須從服務(wù)器指定的地址獲得。
- 306,前一版本HTTP中使用的代碼,現(xiàn)已不再使用。
- 307,聲明請(qǐng)求的資源臨時(shí)性刪除。
2.4 4XX(客戶端錯(cuò)誤類)
該類型狀態(tài)碼表示請(qǐng)求包含錯(cuò)誤語(yǔ)法或不能正確執(zhí)行。
- 400,客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤。
- 401,請(qǐng)求未經(jīng)授權(quán)。
- 402,保留有效ChargeTo頭響應(yīng)。
- 403,禁止訪問,服務(wù)器收到請(qǐng)求,但拒絕提供服務(wù)。
- 404,可連接服務(wù)器,但服務(wù)器無(wú)法取得所請(qǐng)求的網(wǎng)頁(yè),請(qǐng)求資源不存在。
- 405,用戶在Request-Line字段定義的方法不被允許。
- 406,根據(jù)用戶發(fā)送的Accept,請(qǐng)求資源不可訪問。
- 407,類似401,用戶必須首先在代理服務(wù)器上取得授權(quán)。
- 408,客戶端沒有在用戶指定的時(shí)間內(nèi)完成請(qǐng)求。
- 409,對(duì)當(dāng)前資源狀態(tài),請(qǐng)求不能完成。
- 410,服務(wù)器上不再有此資源。
- 411,服務(wù)器拒絕用戶定義的Content-Length屬性請(qǐng)求。
- 412,一個(gè)或多個(gè)請(qǐng)求頭字段在當(dāng)前請(qǐng)求中錯(cuò)誤。
- 413,請(qǐng)求的資源大于服務(wù)器允許的大小。
- 414,請(qǐng)求的資源URL長(zhǎng)于服務(wù)器允許的長(zhǎng)度。
- 415,請(qǐng)求資源不支持請(qǐng)求項(xiàng)目格式。
- 416,請(qǐng)求中包含Range請(qǐng)求頭字段,在當(dāng)前請(qǐng)求資源范圍內(nèi)沒有range指示值。
- 417,服務(wù)器不滿足請(qǐng)求Expect頭字段指定的期望值。
2.5 5XX(服務(wù)器錯(cuò)誤類)
該類型狀態(tài)碼表示服務(wù)器或網(wǎng)關(guān)錯(cuò)誤。
- 500,服務(wù)器錯(cuò)誤。
- 501,服務(wù)器不支持請(qǐng)求的功能。
- 502,網(wǎng)關(guān)錯(cuò)誤。
- 503,無(wú)法獲得服務(wù)。
- 504,網(wǎng)關(guān)超時(shí)。
- 505,不支持的http版本。
3、響應(yīng)頭
是對(duì)響應(yīng)的一種限定,包含很多屬性。常用的屬性有:
- Location,實(shí)現(xiàn)請(qǐng)求重定向。
- Server,服務(wù)器的基本信息。
- Content-Encoding,服務(wù)器發(fā)送數(shù)據(jù)時(shí)使用的壓縮格式。
- Content-Language,發(fā)送的數(shù)據(jù)所用的語(yǔ)言。
- Content-Type,所發(fā)送的數(shù)據(jù)的類型。
- Content-Length,發(fā)送數(shù)據(jù)的大小。
- Set-Cookie,把cookie發(fā)送到客戶端。
- Last-Modified,指示資源的最后修改日期和時(shí)間。
轉(zhuǎn)載于:https://www.cnblogs.com/gefenghua/p/6289273.html
總結(jié)
以上是生活随笔為你收集整理的HTTP协议快速入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CMD、AMD、commonJs 规范的
- 下一篇: css sprite讲解与使用实例