HTTP协议学习笔记(一)请求方法名及状态码
HTTP協議是位于TCP協議之上的應用層協議,是應用進程之間通訊的一種協議。之所以稱之為應用層協議,是因為它無需關心數據是通過什么方式到達對端的,在到達對方的應用程序之前都經歷了什么,而只需要協商好使用的數據格式,保證一方可以解析出另一方的意圖即可
這也是TCP/IP協議的真正目的,上層無需過度關心底層的實現細節
當用戶在瀏覽器上輸入一段網址后,主要經歷了以下幾個階段
- dns解析,通過主機名找到主機ip地址
- 向對應ip地址和端口(默認是80)發送連接請求,服務器接收請求(三次握手)
- 瀏覽器發送HTTP請求報文段
- 服務器解析HTTP請求,生成響應報文段
- 瀏覽器解析HTTP響應,將資源信息顯示在屏幕上
- 保持連接或者斷開連接,取決于是否開啟keep-alive
可以參考這篇博客,講得比較詳細從輸入URL到頁面加載發生了什么
URL格式
不管是否學過HTTP協議,總聽過URL這個東西吧,平時輸入在瀏覽器上的網址,自然就是URL本尊了。但是URI又是什么呢
URI學名叫統一資源標識符,它有兩種形式,分別是URL和URN
URL,統一資源定位符是URI最常見的形式,它描述了資源在一臺特定服務器上的特定位置。比如輸入下面的網址時
http://www.balabala.com/index.html實際上要訪問的資源就是目標主機服務器當前目錄下的index.html文件,而
http://www.balabala.com/image/hello.jpg要訪問的是目標主機服務器當前目錄下的image子目錄下的hello.jpg文件
通過URL可以準確定位一個資源的具體位置。但是如果服務器主機的內部目錄有所改變,那么網站就要改變了
URL的完整格式如下
雖然很復雜,但是基本上沒有哪個URL包含的這么完整,由于http默認端口號是80,經常省略,所以通常使用協議,地址,路徑三部分就足以定位到某個主機的某個資源了,比如下面這段URL
http://www.balabala.com/index.html其中http就是采用的協議,www.balabala.com代表目標服務器的主機ip或者主機名,/index.html表示目標主機的資源路徑
除了上述三部分,出現次數比較多的還有查詢字符串,它由?標識開始,通常是將后面出現的變量值作為參數傳遞給訪問的資源(動態資源)。比如下面的URL
http://www.balabala.com/cgi-bin/adder?a=1&b=2首先從中截取出資源位置/cgi-bin/adder(這里假設adder是一個可執行文件,接收兩個數,返回加法和)
并將1和2作為參數調用/cig-bin/adder這個程序,然后將計算結果返回給客戶端
URN稱為統一資源名,是通過文件名定位資源的一種形式,目前正在研究中。。。
HTTP請求報文段
客戶端與服務器的通信是基于HTTP協議的,通信雙方發送的數據格式必須符合HTTP協議標準,這樣接收方才能解析出發送方的意圖。
HTTP協議規定必須是客戶端先發送請求,然后服務器處理后發送響應。服務器不能在沒有收到客戶端請求的情況下主動發送數據給客戶端。
websocket正是為了解決這一問題而誕生的,比如一個獲取時間的web服務器,一有連接就將當前時間主動發給客戶端
請求報文段分為請求行,請求頭,請求體(數據實體)三部分。請求行由方法名,資源路徑,版本號三部分組成
GET /index.html HTTP/1.1方法名
方法名指出客戶端的意圖,常用的幾個方法名有GET, POST, HEAD, PUT, OPTIONS, TRACE等
GET
GET是最常用的方法,當客戶端想要從服務器上獲取某個資源的內容時使用。服務器將資源內容作為響應報文段的數據實體返回
HEAD
HEAD方法與GET類似,但是服務器只通過HTTP響應頭返回資源的信息(如文件大小,類型等),響應報文段的數據實體為空
PUT
PUT方法表示客戶端想要在服務器上生成一個文件,文件名由請求行的資源路徑指出,文件內容由數據實體指出。如果服務器上存在同名文件,則覆蓋
POST
POST方法表示客戶端打算向服務器提交某些數據,比如圖書管理員想要向服務器的數據庫中增加新圖書,就可以通過POST方法提交一個表單,包含圖書的各種信息
TRACE
TRACE方法表示客戶端想要看看自己發送的請求報文段是什么樣子,也就是服務器回復的HTTP響應頭的數據實體部分是它收到的請求報文段。由于在HTTP請求報文段被送往服務器的過程中可能會途徑代理服務器,而代理服務器可能會更改請求報文段,為了一探究竟,客戶端可以使用TRACE方法
OPTIONS
OPTIONS方法用于獲取服務器支持的所有方法名,以防止客戶端使用了服務器不支持的方法
DELETE
DELETE方法用于將服務器上的某個資源刪掉,是否刪除取決于服務器
HTTP響應報文段
HTTP響應報文段由響應行,響應頭,響應體(數據實體)三部分組成。當服務器處理完客戶端的請求后會發送響應報文段給客戶端告知服務器的處理結果
比如客戶端想要獲取目標資源/index.html的內容,如果服務器正確找到index.html文件,就會將它的內容作為數據實體返回給客戶端。但是如果服務器沒有找到/index.html文件或者無法識別HTTP請求信息,就會返回一個代表出錯的響應報文段
響應行包含了HTTP協議版本號,狀態碼和狀態信息
HTTP/1.1 200 OK狀態碼
狀態碼用于說明服務器對于客戶端請求的處理情況,分成五大類,范圍從100到599總共600個
100~199代表信息性狀態碼
使用不多
200~299代表成功狀態碼
這些狀態碼表示客戶端的請求服務器已經成功處理。常見的狀態碼及解釋如下
300~399代表重定向狀態碼
這些狀態碼告知客戶端要么使用替代的位置訪問想要的資源,要么告訴服務器可以返回什么來替代資源內容
比如客戶端請求服務器上的一個資源信息,但是這個資源已經移動到其它地方了,此時服務器會將資源的新位置返回給客戶端,隨后客戶端重新請求資源信息
常見的狀態碼有
400~499代表客戶端錯誤狀態碼
比如最討厭的404,它表示服務器對客戶端請求的資源一無所知
常見的狀態碼如下
500~599代表服務器錯誤狀態
表示服務器出現錯誤,常見的狀態碼如下
總結
以上是生活随笔為你收集整理的HTTP协议学习笔记(一)请求方法名及状态码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天一道LeetCode-----计算小
- 下一篇: 每天一道LeetCode-----判断给