HTTP是分佈式、協作的、超媒體信息系統的應用層協議。
HTTP的工作方式:
HTTP是符合C/S模型的,總是Client端發起請求,整個過程,可以簡單分爲以下四步:
1)客戶端發起請求,與服務器端完成‘TCP三次握手’;
2)客戶端向服務器端發出“HTTP請求報文”;
3)服務器端在完成內部處理後,向客戶端發出“HTTP響應報文”;
4)客戶端與服務器端完成“TCP四次握手”;
超文本傳輸協議URL:
超文本傳輸協議URL方案規定的語法與語義:
http://host[:port][path]
其中:http://表示要使用的HTTP協議;
host:可用域名或IP地址
port:可選、端口號
path:可選、表示請求的資源所在的路徑,缺省情況下爲/
報文的組成:
1)起始行:start line
2)首部: Header
3)主體:body
使用wfetch工具獲得的內容:(利用/*...*/註釋解釋) 1)HTTP請求報文: 請求行包括三個字段:方法字段、URI字段、HTTP版本字段 REQUEST: **************\n /*這是向百度發起的請求:HTTP版本顯示爲HTTP 1.1,方法爲GET, 向服務器/申請資源;*/ GET / HTTP/1.1\r\n /*Host用來指定要請求的服務器主機爲220.181.112.244*/ Host: 220.181.112.244\r\n Accept: */*\r\n /*這裏是一個空行,而且是必須有的這個空行。這是HTTP協議的硬性規定*/ \r\n 2)HTTP響應報文: RESPONSE: **************\n /*第一行是狀態行,包括三個字段:版本字段、狀態字段、原因短語字段*/ /*下面,HTTP協議的響應表達是服務器使用的是HTTP協議1.1版本,而且找到了客戶端所需要的資源,且會響應報文 發送給客戶端,整個過程是正常的*/ HTTP/1.1 200 OK\r\n /*響應報文被髮送出去的時間*/ Date: Sat, 31 May 2014 07:09:12 GMT\r\n /*指出包含的數據時HTML文本內容*/ 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域表明這個響應報文是BWS服務器發出的,且版本是1.1*/ Server: BWS/1.1\r\n BDPAGETYPE: 1\r\n BDQID: 0x81b75e41000579e6\r\n BDUSERID: 0\r\n /*這裏的空行也是不能省略的*/ \r\n /*主體*/ .............
HTTP報文格式:
連接:
永久HTTP連接的優勢:
1)通過打開和關閉更少的TCP連接,將節約在路由器和主機上的CPU時間,且能夠在主機上節約TCP協議控制塊所使用的內存。
2)HTTP請求和響應能夠如管道相互通過連接。管道允許客戶端需要等待每一個響應就發出多個請求,允許單個TCP連接更有效地使用,花費更少的時間。
3)減少網絡擁塞,通過減少由TCP打開引出的許多包,和通過允許TCP有充分時間來判斷網絡的擁塞狀態。
4)後序請求的延遲養活了,因爲沒有花費時間在TCP倆接打開握手上。
5)HTTP能夠更有好地進化,由於錯誤能夠被報告,而不需要關閉TCP連接的處罰。
HTTP狀態碼:
信息性
100 Continue:客戶端應該繼續它的請求;
101 Switching Protocols:服務器理解並願意答應客戶端的請求;
成功
這類狀態碼錶示客戶端的請求成功被接收、理解和接受了;
200 OK:請求已經成功。
201 Created:請求全部成功,且創建了新新資源。
202 Accepted:請求已經接受處理,但是處理還沒有完成。
203 Non-Authoriative Infomation:實體頭部中返回的元信息不實在原始服務器有效地確定的集合,而是從本地或第三方拷貝收集的。
204 No Content:服務器已經完成請求;
205 Reset Content:服務器已經完成請求且用戶代理應該復位引起請求發送的文檔視圖。
206 Partial Content: 服務器資源已經完成局部資源的GET請求;
重定向
這類狀態碼指示,需要用戶代理採取更進一步的行爲來完成請求。
300 Multiple Choices:所請求的資源符合表達式集合中的任何一個,每個都有它自己的特殊位置。
301 Moved Permannently:所請求的資源已經指定到一個新的永久URI,且將來任何對該資源的引用都應該使用所返回的URI之一。
302 Found:所請求的資源臨時存在不同的URI。
303 See Other:請求的響應可以再不同的URI中發現,且應該使用GET方法到該資源來獲取它。
304 Not Modified:如果客戶端執行條件GET請求,且允許訪問,但文檔沒有變化,服務器用該響應碼響應。
305 USE Proxy:所請求的資源必須通過Location域中給出的代理來訪問。
306 : 保留;
客戶端錯誤:
4xx類的狀態碼用於看起來客戶端有錯誤的情況下。
400 Bad Request:服務器不能理解該請求,由於畸形的語法。客戶端不應該重複沒有經修改的請求。
401 unauthorized:請求需呀用戶認證。
402 Payment Required:保留;
403 Forbidden:服務器理解請求,但拒絕完成它。
404 Not Found: 服務器不能匹配Request-URI的任何東西;
405 Method not Allowed:Request-Line 中指定的方法不允許用到由Request-URI標識的資源。
406 Not Acceptable:請求所標識的資源的內容特性不被請求中所發送的接受頭部所接受,所以不能生成響應;
407:同401類似
408 Request Timeout:在服務器準備等待的時間內,客戶端沒有產生任何請求。
409 Conflict:請求沒有完成,因爲對資源現有狀態的衝突;
410 Gone:所請求的資源不再服務器上有效,且不知道轉發地址。
411 Length required:服務器拒絕接受沒有定義的請求;
412 Precondition Failed:在一個或多個請求頭部域給出的前提在服務器上測試評估失敗。
413 :服務器拒絕處理請求,因爲情趣實體長於服務器願意或能夠處理的長度;
414 :服務器拒絕服務請求,因爲Request-URI長於服務器願意解析的長度;
415 : 服務器拒絕服務請求,因爲請求的實體是請求方法所請求的資源所不支持的格式;
416 : 服務器應該返回該狀態碼的響應,如果請求包括Range請求頭部,且該域中的範圍指定沒喲覆蓋任何選擇西苑的當前長度;
服務器錯誤
由數字5打頭的響應狀態碼錶示服務器已經明顯處於錯誤的狀況下或沒有能力執行請求;
500 Internal Server Error:服務器發生非預期情況,阻止它完成請求。
501 not implemented:服務器不提供完成請所需要的功能;
502 Bad Gateway:當作爲網關或代理時,服務器從它靠近的上游服務器收到試圖完成請求的無效響應。
503 Service unavailable:服務器當前不能處理請求,因爲臨時性的負載過重或服務器維護中;
504 Gateway Timeout:當作爲網關或代理時,服務器試圖完成請求是沒有從URI指定我上游服務器或一些其它所需來訪問的輔助服務器收到定時響應;
505 HTTP Version Not Supported:服務器不支持,或拒絕支持,請求消息中使用的HTTP協議版本。
HTTP緩存:
HTTP一般用在分佈式信息系統,其性能可能通過使用響應緩存來改善