HTTP——詳細瞭解HTTP協議、請求方法、請求格式、響應格式、狀態碼

目錄

1、HTTP協議簡介

2、HTTP協議概述

3、HTTP工作原理

4、HTTP特點

5、HTTP請求方法

6、HTTP請求格式

7、HTTP響應格式

8、HTTP狀態碼

9、HTTP請求與響應舉例

附:首部字段列表


 

1、HTTP協議簡介

HTTP超文本傳輸協議(英文:HyperText Transfer Protocol)是一種用於分佈式、協作式和超媒體信息系統的應用層協議。HTTP是萬維網的數據通信的基礎。

HTTP的發展是由蒂姆·伯納斯-李於1989年在歐洲核子研究組織(CERN)所發起。HTTP的標準制定由萬維網協會(World Wide Web Consortium,W3C)和互聯網工程任務組(Internet Engineering Task Force,IETF)進行協調,最終發佈了一系列的RFC,其中最著名的是1999年6月公佈的 RFC 2616,定義了HTTP協議中現今廣泛使用的一個版本——HTTP 1.1。

2014年12月,互聯網工程任務組(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小組將HTTP/2標準提議遞交至IESG進行討論,於2015年2月17日被批准。 HTTP/2標準於2015年5月以RFC 7540正式發表,取代HTTP 1.1成爲HTTP的實現標準。

2、HTTP協議概述

HTTP是一個客戶端終端(用戶)和服務器端(網站)請求和應答的標準(TCP)。通過使用網頁瀏覽器、網絡爬蟲或者其它的工具,客戶端發起一個HTTP請求到服務器上指定端口(默認端口爲80)。我們稱這個客戶端爲用戶代理程序(user agent)。應答的服務器上存儲着一些資源,比如HTML文件和圖像。我們稱這個應答服務器爲源服務器(origin server)。在用戶代理和源服務器中間可能存在多個“中間層”,比如代理服務器、網關或者隧道(tunnel)。

儘管TCP/IP協議是互聯網上最流行的應用,HTTP協議中,並沒有規定必須使用它或它支持的層。事實上,HTTP可以在任何互聯網協議上,或其他網絡上實現。HTTP假定其下層協議提供可靠的傳輸。因此,任何能夠提供這種保證的協議都可以被其使用。因此也就是其在TCP/IP協議族使用TCP作爲其傳輸層。

通常,由HTTP客戶端發起一個請求,創建一個到服務器指定端口(默認是80端口)的TCP連接。HTTP服務器則在那個端口監聽客戶端的請求。一旦收到請求,服務器會向客戶端返回一個狀態,比如"HTTP/1.1 200 OK",以及返回的內容,如請求的文件、錯誤消息、或者其它信息。

img

3、HTTP工作原理

HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行作爲響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。

【以下是 HTTP 請求/響應的步驟】:

  • 1) 客戶端連接到Web服務器:一個HTTP客戶端,通常是瀏覽器,與Web服務器的HTTP端口(默認爲80)建立一個TCP套接字連接。
  • 2) 發送HTTP請求:通過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。
  • 3) 服務器接受請求並返回HTTP響應:Web服務器解析請求,定位請求資源。服務器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。
  • 4) 釋放連接TCP連接:若connection 模式爲close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式爲keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求;
  • 5)客戶端瀏覽器解析HTML內容:客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態代碼。然後解析每一個響應頭,響應頭告知以下爲若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示。

【舉例】在瀏覽器地址欄鍵入URL,按下回車之後會經歷以下流程:

  • 1)瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;
  • 2)解析出 IP 地址後,根據該 IP 地址和默認端口 80,和服務器建立TCP連接;
  • 3)瀏覽器發出讀取文件(URL 中域名後面部分對應的文件)的HTTP 請求,該請求報文作爲 TCP 三次握手的第三個報文的數據發送給服務器;
  • 4)服務器對瀏覽器請求作出響應,並把對應的 html 文本發送給瀏覽器;
  • 5)釋放 TCP連接;
  • 6)瀏覽器將該 html 文本並顯示內容;  

4、HTTP特點

1)基於 請求-響應 的模式

  HTTP協議規定,請求從客戶端發出,最後服務器端響應該請求並 返回。換句話說,肯定是先從客戶端開始建立通信的,服務器端在沒有 接收到請求之前不會發送響應。

    img

2)無狀態保存

  HTTP協議 自身不對請求和響應之間的通信狀態進行保存。也就是說在HTTP這個 級別,協議對於發送過的請求或響應都不做持久化處理。這是爲了更快地處理大量事務,確保協議的可伸縮性,而特意把HTTP協議設計成 如此簡單的。可是,隨着Web的不斷髮展,因無狀態而導致業務處理變得棘手 的情況增多了。比如,用戶登錄到一家購物網站,即使他跳轉到該站的 其他頁面後,也需要能繼續保持登錄狀態。針對這個實例,網站爲了能 夠掌握是誰送出的請求,需要保存用戶的狀態。HTTP/1.1雖然是無狀態協議,但爲了實現期望的保持狀態功能, 於是引入了Cookie技術。有了Cookie再用HTTP協議通信,就可以管 理狀態了。

    

3)無連接

  無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間,並且可以提高併發性能,不能和每個用戶建立長久的連接,請求一次響應一次,服務端和客戶端就中斷了。但是無連接有兩種方式,早期的http協議是一個請求一個響應之後,直接就斷開了,但是現在的http協議1.1版本不是直接就斷開了,而是等幾秒鐘,這幾秒鐘是等什麼呢,等着用戶有後續的操作,如果用戶在這幾秒鐘之內有新的請求,那麼還是通過之前的連接通道來收發消息,如果過了這幾秒鐘用戶沒有發送新的請求,那麼就會斷開連接,這樣可以提高效率,減少短時間內建立連接的次數,因爲建立連接也是耗時的,默認的好像是3秒中現在,但是這個時間是可以通過咱們後端的代碼來調整的,自己網站根據自己網站用戶的行爲來分析統計出一個最優的等待時間。

5、HTTP請求方法

HTTP/1.1協議中共定義了八種方法(也叫“動作”)來以不同方式操作指定的資源,GET與PUT兩種方法最爲常用,注意方法名稱是區分大小寫的

序號 方法 描述
1 GET 向指定的資源發出“顯示”請求。使用GET方法應該只用在讀取數據,而不應當被用於產生“副作用”的操作中,例如在Web Application中。其中一個原因是GET可能會被網絡蜘蛛等隨意訪問。
2 HEAD

同GET方法,都是向服務器發出指定資源的請求。只不過服務器將不傳回資源的本文部分。它的好處在於,使用這個方法可以在不必傳輸全部內容的情況下,就可以獲取其中“關於該資源的信息”(元信息或稱元數據)。

3 POST

向指定資源提交數據,請求服務器進行處理(例如提交表單或者上傳文件)。數據被包含在請求本文中。這個請求可能會創建新的資源或修改現有資源,或二者皆有。

4 PUT

向指定資源位置上傳其最新內容。

5 DELETE

請求服務器刪除Request-URI所標識的資源。

6 TRACE

回顯服務器收到的請求,主要用於測試或診斷。

7 OPTIONS

這個方法可使服務器傳回該資源所支持的所有HTTP請求方法。用'*'來代替資源名稱,向Web服務器發送OPTIONS請求,可以測試服務器功能是否正常運作。

8 CONNECT

HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。通常用於SSL加密服務器的鏈接(經由非加密的HTTP代理服務器)。

注意:

  • GET提交的數據會放在URL之後,也就是請求行裏面,以?分割URL和傳輸數據,參數之間以&相連,如EditBook?name=test1&id=123456.(請求頭裏面那個content-type做的這種參數形式,後面講) POST方法是把提交的數據放在HTTP包的請求體中.

  • GET提交的數據大小有限制(因爲瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制.

【補充】URL的格式:
protocol://hostname[:port]/website/path/ [file][?query][#fragment]
協議名://主機名:端口號/網站名稱/目錄/文件名?查詢參數#信息片段

  • protocol:協議名稱,比如http、ftp、file、gopher、https、mailto、news
  • hostname:主機名稱,通常爲機器名+域名+域樹+域林
  • port:端口號,http的通常默認爲8080,telnet默認爲23,ftp默認爲21,smtp默認爲25,pop3默認爲110,dns默認爲53
  • website:網站名稱,可以是web應用程序上下文、虛擬目錄名、網站根目錄、
  • path/file:目錄/文件
  • ?query:(GET模式的窗體參數,以“?”字符爲起點,每個參數以“&”隔開,再以“=”分開參數名稱與數據,通常以UTF8的URL編碼,避開字符衝突的問題)
  • #fragment:信息片段,是一種網頁描點

比如  http://www.lytu.edu.cn:80/chpage/index.html?str=abc#a1

6、HTTP請求格式

      

  length表示請求體裏面的數據長度,name=ueno&age=37   爲16字節;請求首部字段名都有專門的名稱及代表意義,此處不贅述了,文末給出通用首部字段、請求首部字段、響應首部字段、實體首部字段的四個附表。

7、HTTP響應格式

             

8、HTTP狀態碼

HTTP響應的的狀態碼由3位數字組成,狀態代碼的第一個數字代表當前響應的類型:

  • 1xx消息——請求已被服務器接收,繼續處理
  • 2xx成功——請求已成功被服務器接收、理解、並接受
  • 3xx重定向——需要後續操作才能完成這一請求
  • 4xx請求錯誤——請求含有詞法錯誤或者無法被執行
  • 5xx服務器錯誤——服務器在處理某個正確請求時發生錯誤

【常見的狀態碼描述如下】:

  • 200:客戶端請求成功,是最常見的狀態。
  • 302:重定向。
  • 404:請求資源不存在,是最常見的狀態。
  • 400:客戶端請求有語法錯誤,不能被服務器所理解。
  • 401:請求未經授權。
  • 403:服務器收到請求,但是拒絕提供服務。
  • 500:服務器內部錯誤,是最常見的狀態。
  • 503:服務器當前不能處理客戶端的請求。

9、HTTP請求與響應舉例

使用瀏覽器的開發者工具(快捷鍵F12),觀察請求與響應如下,可以看到請求頭、響應頭,響應正文等。

附:首部字段列表

通用首部字段:請求報文和響應報文兩方都會使用的首部

請求首部字段:從客戶端向服務器端發送請求報文時使用的首部

響應首部字段:從服務器端向客戶端返回響應報文時使用的首部

實體首部字段:針對請求報文和響應報文實體部分使用的首部

參考:

https://blog.csdn.net/Alexshi5/article/details/80379086?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://www.cnblogs.com/an-wen/p/11180076.html

https://blog.csdn.net/qq_38265137/article/details/93379922

https://www.processon.com/view/link/5c97952de4b0ab74ece439cd#map(HTTP協議思維導圖)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章