HTTP協議(HyperText Transfer Protocol,超文本傳輸協議),是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。它是因特網上應用最爲普遍的一種網絡傳輸協議,全部的WWW文件都必須遵照這個標準。html
HTTP是一個基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。瀏覽器
HTTP協議工做於客戶端-服務端架構上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。bash
Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。服務器
Web服務器根據接收到的請求後,向客戶端發送響應信息。網絡
HTTP默認端口號爲80,可是你也能夠改成8080或者其餘端口。架構
下圖表展現了HTTP協議通訊流程:ide
一次HTTP請求,其工做過程大概以下:網絡傳輸協議
用戶在瀏覽器中鍵入須要訪問網頁的URL或者點擊某個網頁中連接;spa
瀏覽器根據URL中的域名,經過DNS解析出目標網頁的IP地址;3d
瀏覽器請求這個頁面:http://hackr.ip/index.html
在這一步,須要域名系統DNS解析域名hackr.ip,得主機的IP地址 20X.189.105.112。
而後將上面結合本機本身的信息,封裝成一個http請求數據包
複製代碼
在HTTP開始工做前,客戶端首先會經過TCP/IP協議來和服務端創建連接(TCP三次握手)
創建鏈接後,客戶機發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和內容。
服務器接到請求後,給予相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。
通常狀況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP鏈接,而後若是瀏覽器或者服務器在其頭信息加入了這行代碼: Connection:keep-alive,TCP鏈接在發送後將仍然保持打開狀態,因而,瀏覽器能夠繼續經過相同的鏈接發送請求。保持鏈接節省了爲每一個請求創建新鏈接所需的時間,還節約了網絡帶寬。
過程以下圖
HTTP是基於客戶端/服務端(C/S)的架構模型,經過一個可靠的連接來交換信息,是一個無狀態的請求/響應協議。HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和創建鏈接。 一旦創建鏈接後,數據消息就經過相似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴展(MIME)[RFC2045]來傳送。
URI(Uniform Resource Identifier)是統一資源標識符,在某個規則下能把這個資源獨一無二標示出來,好比人的身份證號
統一資源定位符,表示資源的地點,URL時使用瀏覽器訪問WEB頁面時須要輸入的網頁地址
客戶端發送一個HTTP請求到服務器的請求消息包括如下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,下圖給出了請求報文的通常格式。
GET 獲取資源
POST 向服務器端發送數據,傳輸實體主體
PUT 傳輸文件
HEAD 獲取報文首部
DELETE 刪除文件
OPTIONS 詢問支持的方法
TRACE 追蹤路徑
協議/版本號
URL
複製代碼
通用首部(General Header)
請求首部(Request Header)
響應首部(Response Header)
實體首部(Entity Header Fields)
複製代碼
HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
狀態碼負責表示客戶端請求的返回結果、標記服務器端是否正常、通知出現的錯誤
類別 | 緣由短語 |
---|---|
1XX | Informational(信息性狀態碼) |
2XX | Success(成功狀態碼) |
3XX | Redirection(重定向) |
4XX | Client Error(客戶端錯誤狀態碼) |
5XX | Server Error(服務器錯誤狀態嗎) |
根據HTTP標準,HTTP請求可使用多種請求方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。