《圖解HTTP》學習記錄四(HTTP的結構與方法)

HTTP報文結構

下圖是一個完整的HTTP報文的形式,一共分為三層:

  • 報文首部: 提供HTTP報文的信息,規(guī)定通信雙方所遵循的一些規(guī)則,請求報文和響應報文的首部的關鍵字是不一樣的;
  • 空格:用來區(qū)分報文首部與報文主體;
  • 報文主體:通信的實質性內(nèi)容,如:客戶端向服務器的請求內(nèi)容,服務器向客戶端的響應內(nèi)容,也可以沒有內(nèi)容;

編碼

HTTP在傳輸過程中可以按照數(shù)據(jù)的原樣直接傳播,也能夠通過編碼壓縮的方式來提升傳輸速率。當然,在提升速率的同時是需要消耗一部分CPU的性能來進行壓縮。

  • 報文(message):是HTTP通信中的基本單位,由8位組字節(jié)流組成,通過HTTP通信傳輸。
  • 實體(enity):作為請求或響應的有效載荷數(shù)據(jù)被傳輸, 其內(nèi)容由實體首部和實體主體構成。

通常來說報文和實體是沒有區(qū)別的,但是當傳輸過程中進行編碼操作后,傳輸?shù)闹黧w便由報文變成了實體。客戶端、服務器雙方約定相同的編碼形式,就可以對報文進行解壓縮了。常用的內(nèi)容編碼有如下幾種:

  • gzip(GNU zip)
  • compress(UNIX系統(tǒng)的標準壓縮)
  • deflate(zlib)
  • identify(不進行編碼)

HTTP的請求方法

  • GET:獲取資源,請求訪問已被URI識別的資源。
  • POSTPOSTGET的方法很相似,但是其主要目的是傳輸實體,也就是用于傳遞大量數(shù)據(jù)至服務器的方法。
  • PUT:傳輸文件,如同F(xiàn)TP協(xié)議中上傳文件的方式一樣,要求在請求報文主體部分包含文件內(nèi)容,保存至請求URI指定的位置,由于本身不帶驗證機制,導致無法保證服務器的安全性,基本上都是被禁用的。
  • DELETE:刪除文件,PUT的逆操作。同PUT一樣,由于沒有驗證機制,故基本上被禁用。
  • HEAD:GET操作的閹割版,只返回報文首部,不返回報文主體。
  • OPTIONS:查詢針對請求URI指定資源支持的方法。假若目標URI支持GET,POST,OPTION,HEAD,則響應報文中會出現(xiàn):Allow:GET,POST,OPTION,HEAD
  • TRACE:讓服務器端將請求通信環(huán)返回給客戶端的方法??蛻舳伺c服務器之間可能存在若干個代理或是網(wǎng)關,通過TRACE方法可以追蹤請求報文所經(jīng)過的路徑,查詢請求是怎樣被修改(或是篡改)的,但因為TRACE方法容易引發(fā)跨站追蹤,所以也不常用。
  • CONNECT:要求在與代理服務器通信時建立隧道,常與SSL或TLS一起包裝使用,也就是HTTPS。

HTTP狀態(tài)碼

在所有的響應報文首部會借助狀態(tài)碼來告訴服務端對本次請求的處理結果,狀態(tài)碼以3位數(shù)字和原因短語構成。第一位數(shù)字代表了響應類別,第二位,第三位只有占位的意義:


狀態(tài)碼一共大概有60多種,但常用的大概只有14種,接下來依次介紹:

  • 200 OK:這是最希望看到的結果,表示服務器已經(jīng)成功處理了客戶端的請求并作出了正確的響應。
  • 204 Not Content:表示服務器已成功處理客戶端的請求,但響應報文中不含實體的主體部分,也不允許返回實體主體。
  • 206 Partial Content:表示客戶端進行了范圍請求,服務器也成功的執(zhí)行了這部分的GET請求。響應報文中包含了Content-Range來表明返回實體主體的范圍。
  • 301 Moved Permanently:永久重定向,表明該資源已經(jīng)被分配了新的URI,輸入老URI會自動跳轉至新URI。
  • 302 Found:臨時重定向,也表明該資源被分配了新的URI,但新的URI也可能發(fā)生改變。
  • 303 See Other:與302一樣,但多了一個限定條件,要求客戶端能用GET方法來獲取資源。
    PS:實際上301,302,303響應狀態(tài)碼返回時,所有的瀏覽器都會將POST改為GET,并刪除請求報文的主體。
  • 304 Not Modified: 該狀態(tài)碼表示客戶端附帶條件請求(帶有IF的首部字段)時,未滿足條件時,服務器卻允許訪問資源的情況。304狀態(tài)碼返回時,不包含任何實體主體部分。當我們?yōu)g覽緩存時,常??吹?04狀態(tài)碼。
  • 400 Bad Request:請求報文中存在語法錯誤。
  • 401 Unauthorized·:表示該請求需要通過HTTP認證(BASIC認證或DIGEST認證)。
  • 403 Forbidden:表示請求被服務器拒絕,往往是客戶端所在IP地址未授權。
  • 404 Not Found:表明在服務器上找不到這個資源,或服務器拒絕請求不想說明理由時也能使用。
  • 500 Internal Server Error:服務器在執(zhí)行請求時出錯,可能是服務器語法錯誤。
  • 503 Service Unavailable:服務器暫時處于超負載(掛了)或正在維護中,暫時無法執(zhí)行請求。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容