HTTP協(xié)議應(yīng)用基礎(chǔ)詳解
HTTP是分布式、協(xié)作的、超媒體信息系統(tǒng)的應(yīng)用層協(xié)議。
HTTP的工作方式:
HTTP是符合C/S模型的,總是Client端發(fā)起請(qǐng)求,整個(gè)過程,可以簡(jiǎn)單分為以下四步:
1)客戶端發(fā)起請(qǐng)求,與服務(wù)器端完成‘TCP三次握手’;
2)客戶端向服務(wù)器端發(fā)出“HTTP請(qǐng)求報(bào)文”;
3)服務(wù)器端在完成內(nèi)部處理后,向客戶端發(fā)出“HTTP響應(yīng)報(bào)文”;
4)客戶端與服務(wù)器端完成“TCP四次握手”;
超文本傳輸協(xié)議URL:
超文本傳輸協(xié)議URL方案規(guī)定的語(yǔ)法與語(yǔ)義:
http://host[:port][path]
其中:http://表示要使用的HTTP協(xié)議;
host:可用域名或IP地址
port:可選、端口號(hào)
path:可選、表示請(qǐng)求的資源所在的路徑,缺省情況下為/
報(bào)文的組成:
1)起始行:start line
2)首部: Header
3)主體:body
使用wfetch工具獲得的內(nèi)容:(利用/*...*/注釋解釋) 1)HTTP請(qǐng)求報(bào)文: 請(qǐng)求行包括三個(gè)字段:方法字段、URI字段、HTTP版本字段 REQUEST: **************\n /*這是向百度發(fā)起的請(qǐng)求:HTTP版本顯示為HTTP 1.1,方法為GET, 向服務(wù)器/申請(qǐng)資源;*/ GET / HTTP/1.1\r\n /*Host用來指定要請(qǐng)求的服務(wù)器主機(jī)為220.181.112.244*/ Host: 220.181.112.244\r\n Accept: */*\r\n /*這里是一個(gè)空行,而且是必須有的這個(gè)空行。這是HTTP協(xié)議的硬性規(guī)定*/ \r\n 2)HTTP響應(yīng)報(bào)文: RESPONSE: **************\n /****行是狀態(tài)行,包括三個(gè)字段:版本字段、狀態(tài)字段、原因短語(yǔ)字段*/ /*下面,HTTP協(xié)議的響應(yīng)表達(dá)是服務(wù)器使用的是HTTP協(xié)議1.1版本,而且找到了客戶端所需要的資源,且會(huì)響應(yīng)報(bào)文 發(fā)送給客戶端,整個(gè)過程是正常的*/ HTTP/1.1 200 OK\r\n /*響應(yīng)報(bào)文被發(fā)送出去的時(shí)間*/ Date: Sat, 31 May 2014 07:09:12 GMT\r\n /*指出包含的數(shù)據(jù)時(shí)HTML文本內(nèi)容*/ Content-Type: text/html; charset=utf-8\r\n Transfer-Encoding: chunked\r\n Connection: Keep-Alive\r\n Vary: Accept-Encoding\r\n Set-Cookie: BAIDUID=95D095CC664A4682316B86A84AFFAFA9:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com\r\n Set-Cookie: BDSVRTM=15; path=/\r\n Set-Cookie: H_PS_PSSID=6597_5229_1442_6855_5224_6505_4760_6018_6678_6708_6835_6775_6737; path=/; domain=.baidu.com\r\n P3P: CP=" OTI DSP COR IVA OUR IND COM "\r\n /*緩存控制*/ Cache-Control: private\r\n Expires: Sat, 31 May 2014 07:09:12 GMT\r\n X-Powered-By: HPHP\r\n /*Server域表明這個(gè)響應(yīng)報(bào)文是BWS服務(wù)器發(fā)出的,且版本是1.1*/ Server: BWS/1.1\r\n BDPAGETYPE: 1\r\n BDQID: 0x81b75e41000579e6\r\n BDUSERID: 0\r\n /*這里的空行也是不能省略的*/ \r\n /*主體*/ .............
HTTP報(bào)文格式:

連接:
***HTTP連接的優(yōu)勢(shì):
1)通過打開和關(guān)閉更少的TCP連接,將節(jié)約在路由器和主機(jī)上的CPU時(shí)間,且能夠在主機(jī)上節(jié)約TCP協(xié)議控制塊所使用的內(nèi)存。
2)HTTP請(qǐng)求和響應(yīng)能夠如管道相互通過連接。管道允許客戶端需要等待每一個(gè)響應(yīng)就發(fā)出多個(gè)請(qǐng)求,允許單個(gè)TCP連接更有效地使用,花費(fèi)更少的時(shí)間。
3)減少網(wǎng)絡(luò)擁塞,通過減少由TCP打開引出的許多包,和通過允許TCP有充分時(shí)間來判斷網(wǎng)絡(luò)的擁塞狀態(tài)。
4)后序請(qǐng)求的延遲養(yǎng)活了,因?yàn)闆]有花費(fèi)時(shí)間在TCP倆接打開握手上。
5)HTTP能夠更有好地進(jìn)化,由于錯(cuò)誤能夠被報(bào)告,而不需要關(guān)閉TCP連接的處罰。
HTTP狀態(tài)碼:
信息性
100 Continue:客戶端應(yīng)該繼續(xù)它的請(qǐng)求;
101 Switching Protocols:服務(wù)器理解并愿意答應(yīng)客戶端的請(qǐng)求;
成功
這類狀態(tài)碼表示客戶端的請(qǐng)求成功被接收、理解和接受了;
200 OK:請(qǐng)求已經(jīng)成功。
201 Created:請(qǐng)求全部成功,且創(chuàng)建了新新資源。
202 Accepted:請(qǐng)求已經(jīng)接受處理,但是處理還沒有完成。
203 Non-Authoriative Infomation:實(shí)體頭部中返回的元信息不實(shí)在原始服務(wù)器有效地確定的集合,而是從本地或第三方拷貝收集的。
204 No Content:服務(wù)器已經(jīng)完成請(qǐng)求;
205 Reset Content:服務(wù)器已經(jīng)完成請(qǐng)求且用戶代理應(yīng)該復(fù)位引起請(qǐng)求發(fā)送的文檔視圖。
206 Partial Content: 服務(wù)器資源已經(jīng)完成局部資源的GET請(qǐng)求;
重定向
這類狀態(tài)碼指示,需要用戶代理采取更進(jìn)一步的行為來完成請(qǐng)求。
300 Multiple Choices:所請(qǐng)求的資源符合表達(dá)式集合中的任何一個(gè),每個(gè)都有它自己的特殊位置。
301 Moved Permannently:所請(qǐng)求的資源已經(jīng)指定到一個(gè)新的***URI,且將來任何對(duì)該資源的引用都應(yīng)該使用所返回的URI之一。
302 Found:所請(qǐng)求的資源臨時(shí)存在不同的URI。
303 See Other:請(qǐng)求的響應(yīng)可以再不同的URI中發(fā)現(xiàn),且應(yīng)該使用GET方法到該資源來獲取它。
304 Not Modified:如果客戶端執(zhí)行條件GET請(qǐng)求,且允許訪問,但文檔沒有變化,服務(wù)器用該響應(yīng)碼響應(yīng)。
305 USE Proxy:所請(qǐng)求的資源必須通過Location域中給出的代理來訪問。
306 : 保留;
客戶端錯(cuò)誤:
4xx類的狀態(tài)碼用于看起來客戶端有錯(cuò)誤的情況下。
400 Bad Request:服務(wù)器不能理解該請(qǐng)求,由于畸形的語(yǔ)法??蛻舳瞬粦?yīng)該重復(fù)沒有經(jīng)修改的請(qǐng)求。
401 unauthorized:請(qǐng)求需呀用戶認(rèn)證。
402 Payment Required:保留;
403 Forbidden:服務(wù)器理解請(qǐng)求,但拒絕完成它。
404 Not Found: 服務(wù)器不能匹配Request-URI的任何東西;
405 Method not Allowed:Request-Line 中指定的方法不允許用到由Request-URI標(biāo)識(shí)的資源。
406 Not Acceptable:請(qǐng)求所標(biāo)識(shí)的資源的內(nèi)容特性不被請(qǐng)求中所發(fā)送的接受頭部所接受,所以不能生成響應(yīng);
407:同401類似
408 Request Timeout:在服務(wù)器準(zhǔn)備等待的時(shí)間內(nèi),客戶端沒有產(chǎn)生任何請(qǐng)求。
409 Conflict:請(qǐng)求沒有完成,因?yàn)閷?duì)資源現(xiàn)有狀態(tài)的沖突;
410 Gone:所請(qǐng)求的資源不再服務(wù)器上有效,且不知道轉(zhuǎn)發(fā)地址。
411 Length required:服務(wù)器拒絕接受沒有定義的請(qǐng)求;
412 Precondition Failed:在一個(gè)或多個(gè)請(qǐng)求頭部域給出的前提在服務(wù)器上測(cè)試評(píng)估失敗。
413 :服務(wù)器拒絕處理請(qǐng)求,因?yàn)榍槿?shí)體長(zhǎng)于服務(wù)器愿意或能夠處理的長(zhǎng)度;
414 :服務(wù)器拒絕服務(wù)請(qǐng)求,因?yàn)镽equest-URI長(zhǎng)于服務(wù)器愿意解析的長(zhǎng)度;
415 : 服務(wù)器拒絕服務(wù)請(qǐng)求,因?yàn)檎?qǐng)求的實(shí)體是請(qǐng)求方法所請(qǐng)求的資源所不支持的格式;
416 : 服務(wù)器應(yīng)該返回該狀態(tài)碼的響應(yīng),如果請(qǐng)求包括Range請(qǐng)求頭部,且該域中的范圍指定沒喲覆蓋任何選擇西苑的當(dāng)前長(zhǎng)度;
服務(wù)器錯(cuò)誤
由數(shù)字5打頭的響應(yīng)狀態(tài)碼表示服務(wù)器已經(jīng)明顯處于錯(cuò)誤的狀況下或沒有能力執(zhí)行請(qǐng)求;
500 Internal Server Error:服務(wù)器發(fā)生非預(yù)期情況,阻止它完成請(qǐng)求。
501 not implemented:服務(wù)器不提供完成請(qǐng)所需要的功能;
502 Bad Gateway:當(dāng)作為網(wǎng)關(guān)或代理時(shí),服務(wù)器從它靠近的上游服務(wù)器收到試圖完成請(qǐng)求的無效響應(yīng)。
503 Service unavailable:服務(wù)器當(dāng)前不能處理請(qǐng)求,因?yàn)榕R時(shí)性的負(fù)載過重或服務(wù)器維護(hù)中;
504 Gateway Timeout:當(dāng)作為網(wǎng)關(guān)或代理時(shí),服務(wù)器試圖完成請(qǐng)求是沒有從URI指定我上游服務(wù)器或一些其它所需來訪問的輔助服務(wù)器收到定時(shí)響應(yīng);
505 HTTP Version Not Supported:服務(wù)器不支持,或拒絕支持,請(qǐng)求消息中使用的HTTP協(xié)議版本。
HTTP緩存:
HTTP一般用在分布式信息系統(tǒng),其性能可能通過使用響應(yīng)緩存來改善。