一、http簡介 HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。
HTTP是一個基於TCP/IP通訊協議來傳遞資料(HTML 檔案, 圖片檔案, 查詢結果等)。
HTTP是一個屬於應用層的物件導向的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。
HTTP協議工作於客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB伺服器傳送所有請求。Web伺服器根據接收到的請求後,向客戶端傳送響應資訊。
二、HTTP之URL HTTP使用統一資源識別符號(Uniform Resource Identifiers, URI)來傳輸資料和建立連線。URL是一種特殊型別的URI,包含了用於查詢某個資源的足夠的資訊
URL,全稱是UniformResourceLocator, 中文叫統一資源定位符,是網際網路上用來標識某一處資源的地址。以下面這個URL為例,介紹下普通URL的各部分組成:
http://www.xxxx.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name 從上面的URL可以看出,一個完整的URL包括以下幾部分: 1.協議部分:該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"後面的“//”為分隔符
2.域名部分:該URL的域名部分為“www.xxxx.com”。一個URL中,也可以使用IP地址作為域名使用
3.埠部分:跟在域名後面的是埠,域名和埠之間使用“:”作為分隔符。埠不是一個URL必須的部分,如果省略埠部分,將採用預設埠
4.虛擬目錄部分:從域名後的第一個“/”開始到最後一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”
5.檔名部分:從域名後的最後一個“/”開始到“?”為止,是檔名部分,如果沒有“?”,則是從域名後的最後一個“/”開始到“#”為止,是檔案部分,如果沒有“?”和“#”,那麼從域名後的最後一個“/”開始到結束,都是檔名部分。本例中的檔名是“index.asp”。檔名部分也不是一個URL必須的部分,如果省略該部分,則使用預設的檔名
6.錨部分:從“#”開始到最後,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分
7.引數部分:從“?”開始到“#”為止之間的部分為引數部分,又稱搜尋部分、查詢部分。本例中的引數部分為“boardID=5&ID=24618&page=1”。引數可以允許有多個引數,引數與引數之間用“&”作為分隔符。
http的三次握手 第一次握手: 建立連線。客戶端傳送連線請求,傳送SYN報文,隨機生成seq,本例預設為0。然後,客戶端進入SYN_SEND狀態,等待伺服器的確認。
第二次握手: 伺服器收到客戶端的SYN報文段。需要對這個SYN報文段進行確認,傳送ACK報文,將ack設定為1(ack值為對方seq+1或者seq+L(資料長度L))。同時,自己還要傳送SYN請求資訊,將seq為0。伺服器端將上述所有資訊一併傳送給客戶端,此時伺服器進入SYN_RECV狀態。
第三次握手: 客戶端收到伺服器的ACK和SYN報文後,進行確認,然後將ack設定為1,seq設定為1,向伺服器傳送ACK報文段,這個報文段傳送完畢以後,客戶端和伺服器端都進入ESTABLISHED狀態,完成TCP三次握手。
四次揮手 第一次揮手:客戶端向伺服器傳送一個FIN報文段,將設定seq為100和ack為120,;此時,客戶端進入 FIN_WAIT_1狀態,這表示客戶端沒有資料要傳送伺服器了,請求關閉連線;
第二次揮手:伺服器收到了客戶端傳送的FIN報文段,向客戶端回一個ACK報文段,ack設定為101,seq設定為120;伺服器進入了CLOSE_WAIT狀態,客戶端收到伺服器返回的ACK報文後,進入FIN_WAIT_2狀態;
第三次揮手:伺服器會觀察自己是否還有資料沒有傳送給客戶端,如果有,先把資料傳送給客戶端,再傳送FIN報文;如果沒有,那麼伺服器直接傳送FIN報文給客戶端。請求關閉連線,同時伺服器進入LAST_ACK狀態;
第四次揮手:客戶端收到伺服器傳送的FIN報文段,向伺服器傳送ACK報文段,將seq設定為101,將ack設定為121,然後客戶端進入TIME_WAIT狀態;伺服器收到客戶端的ACK報文段以後,就關閉連線;此時,客戶端等待2MSL後依然沒有收到回覆,則證明Server端已正常關閉,客戶端也可以關閉連線了。
HTTP之響應訊息Response 一般情況下,伺服器接收並處理客戶端發過來的請求後會返回一個HTTP的響應訊息。
HTTP響應也由四個部分組成,分別是:狀態行、訊息報頭、空行和響應正文。
HTTP狀態碼
類別 | 原因短語 |
---|---|
1XX | Informational(資訊性狀態碼) |
2XX | Success(成功狀態碼) |
3XX | Redirection(重定向) |
4xx | Client Error(客戶端錯誤狀態碼) |
5xx | Server Error(伺服器錯誤狀態嗎) |
HTTP請求方法 根據HTTP標準,HTTP請求可以使用多種請求方法。 HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。 HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
請求方式 | 代表意思 |
---|---|
GET | 請求指定的頁面資訊,並返回實體主體。 |
HEAD | 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
POST | 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案) |
PUT | 從客戶端向伺服器傳送的資料取代指定的文件的內容。 |
DELETE | 請求伺服器刪除指定的頁面。 |
CONNECT | HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。 |
OPTIONS | 允許客戶端檢視伺服器的效能。 |
TRACE | 回顯伺服器收到的請求,主要用於測試或診斷 |