HTTP協(xié)議版本
HTTP協(xié)議有兩種版本:HTTP1.0/HTTP1.1 ,可以這樣區(qū)別:
- HTTP1.0對(duì)于每個(gè)連接都的建立一次連接一次只能傳送一個(gè)請(qǐng)求和響應(yīng)肠缔,請(qǐng)求就會(huì)關(guān)閉奴璃,HTTP1.0沒有Host字段;
- HTTP1.1在同一個(gè)連接中可以傳送多個(gè)請(qǐng)求和響應(yīng)蔬顾,多個(gè)請(qǐng)求可以重疊和同時(shí)進(jìn)行,HTTP1.1必須有Host字段。
HTTP請(qǐng)求類型
根據(jù)HTTP標(biāo)準(zhǔn)须揣,HTTP請(qǐng)求可以使用多種請(qǐng)求方法。例如:HTTP1.1支持7種請(qǐng)求方法:GET钱豁、POST耻卡、HEAD、OPTIONS牲尺、PUT卵酪、DELETE和TARCE。在Internet應(yīng)用中,最常用的方法是GET和POST凛澎。
- GET 請(qǐng)求獲取由Request-URI所標(biāo)識(shí)的資源霹肝。
- POST 在Request-URI所標(biāo)識(shí)的資源后附加新的數(shù)據(jù)。
- HEAD 請(qǐng)求獲取由Request-URI所標(biāo)識(shí)的資源的響應(yīng)消息報(bào)頭塑煎。
- OPTIONS 請(qǐng)求查詢服務(wù)器的性能沫换,或查詢與資源相關(guān)的選項(xiàng)和需求。
- PUT 請(qǐng)求服務(wù)器存儲(chǔ)一個(gè)資源最铁,并用Request-URI作為其標(biāo)識(shí)讯赏。
- DELETE 請(qǐng)求服務(wù)器刪除由Request-URI所標(biāo)識(shí)的資源。
- TRACE 請(qǐng)求服務(wù)器回送收到的請(qǐng)求信息冷尉,主要用語測(cè)試或診斷漱挎。
HTTP請(qǐng)求格式
當(dāng)瀏覽器向Web服務(wù)器發(fā)出請(qǐng)求時(shí),它向服務(wù)器傳遞了一個(gè)數(shù)據(jù)塊雀哨,也就是請(qǐng)求信息磕谅,HTTP請(qǐng)求信息由3部分組成:
① 請(qǐng)求方法 URI 協(xié)議/版本
② 請(qǐng)求頭(Request Header)
③ 請(qǐng)求正文下面是一個(gè)HTTP請(qǐng)求的例子:
1.請(qǐng)求方法URI協(xié)議/版本
請(qǐng)求的第一行是“方法URL協(xié)議版本”:GET/sample.jsp HTTP/1.1如上面圖片所示,“GET”代表請(qǐng)求方法雾棺,“/sample.jsp”表示URI膊夹,“HTTP/1.1代表協(xié)議和協(xié)議的版本。
URL完整地指定了要訪問的網(wǎng)絡(luò)資源捌浩,通常只要給出相對(duì)于服務(wù)器的根目錄的相對(duì)目錄即可放刨,因此總是以“/”開頭,最后尸饺,協(xié)議版本聲明了通信過程中使用HTTP的版本进统。
2.請(qǐng)求頭(Request Header)
請(qǐng)求頭包含許多有關(guān)的客戶端環(huán)境和請(qǐng)求正文的有用信息。例如浪听,請(qǐng)求頭可以聲明瀏覽器所用的語言螟碎,請(qǐng)求正文的長(zhǎng)度等。
3.請(qǐng)求正文
請(qǐng)求頭和請(qǐng)求正文之間是一個(gè)空行馋辈,這個(gè)行非常重要抚芦,它表示請(qǐng)求頭已經(jīng)結(jié)束,接下來的是請(qǐng)求正文迈螟。請(qǐng)求正文中可以包含客戶提交的查詢字符串信息:username=jinqiao&password=1234在以上的例子的HTTP請(qǐng)求中叉抡,請(qǐng)求的正文只有一行內(nèi)容。當(dāng)然答毫,在實(shí)際應(yīng)用中褥民,HTTP請(qǐng)求正文可以包含更多的內(nèi)容。
4.請(qǐng)求方法
HTTP請(qǐng)求方法我這里只討論GET方法與POST方法
- GET方法
GET方法是默認(rèn)的HTTP請(qǐng)求方法洗搂,我們?nèi)粘S肎ET方法來提交表單數(shù)據(jù)消返,然而用GET方法提交的表單數(shù)據(jù)只經(jīng)過了簡(jiǎn)單的編碼载弄,同時(shí)它將作為URL的一部分向Web服務(wù)器發(fā)送,因此撵颊,如果使用GET方法來提交表單數(shù)據(jù)就存在著安全隱患上宇攻。例如Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB從上面的URL請(qǐng)求中,很容易就可以辯認(rèn)出表單提交的內(nèi)容倡勇。(逞刷?之后的內(nèi)容)另外由于GET方法提交的數(shù)據(jù)是作為URL請(qǐng)求的一部分所以提交的數(shù)據(jù)量不能太大
- POST方法
POST方法是GET方法的一個(gè)替代方法,它主要是向Web服務(wù)器提交表單數(shù)據(jù)妻熊,尤其是大批量的數(shù)據(jù)夸浅。POST方法克服了GET方法的一些缺點(diǎn)。通過POST方法提交表單數(shù)據(jù)時(shí)扔役,數(shù)據(jù)不是作為URL請(qǐng)求的一部分而是作為標(biāo)準(zhǔn)數(shù)據(jù)傳送給Web服務(wù)器帆喇,這就克服了GET方法中的信息無法保密和數(shù)據(jù)量太小的缺點(diǎn)。因此亿胸,出于安全的考慮以及對(duì)用戶隱私的尊重坯钦,通常表單提交時(shí)采用POST方法。
HTTP響應(yīng)格式
HTTP應(yīng)答與HTTP請(qǐng)求相似损敷,HTTP響應(yīng)也由3個(gè)部分構(gòu)成葫笼,分別是:
① 狀態(tài)行
② 響應(yīng)頭(Response Header)
③ 響應(yīng)正文
下面是一個(gè)HTTP響應(yīng)的例子:
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
<html>
<head>
<title>HTTP響應(yīng)示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>