計算機網絡 6.HTTP協議


HTTP協議

HTTP協議的概念和作用

​ HTTP(HyperText Transfer Protocol)超文本協議傳輸協議,是互聯網上應用最為廣泛的一種網絡協議,所有WWW文件都必須遵守這個標准,設計HTTP是為了提供一種發布和接收HTML頁面的方法

​ HTTP是一個客戶端與服務器端請求和應答的標准(TCP),就是客戶端按一定規則向服務器發送數據,而服務器也按一定規則回應數據,客戶端是終端用戶,服務器端是網站,通過使用Web瀏覽器、網絡爬蟲或其他工具,客戶端發起一個到服務器上指定端口(默認端口為80)的HTTP請求

​ HTTP協議是一種無狀態的,以請求/響應方式運行的協議,它使用可擴展的語義和自描述消息格式,與基於網絡的超文本信息系統靈活的互動

​ HTTP協議是一種應用層協議

特點:

  • 無狀態:不會存儲用戶的信息
  • 可擴展的語義:可以在協議的基礎上添加內容,比如頭部的字段
  • 自描述:消息類型可以是文本、圖片、音視頻
  • 超文本信息系統:HTML

​ 在Web應用中,服務器把網頁傳給瀏覽器,實際就是把網頁的HTML代碼發送給瀏覽器,瀏覽器解析后顯示出來,瀏覽器和服務器之間的傳輸應用層協議就是HTTP

  • HTML是一種用來定義網頁的文本
  • HTTP是用來在網絡上傳輸HTML文本的協議,用於瀏覽器和服務器的通信

Elements:查看或修改HTML元素的屬性、CSS屬性、監聽事件、斷點等

Console:控制台一般用於執行一次性代碼,查看JavaScript對象,查看調試日志或異常信息

Sources:查看和調試頁面HTML文件源碼、JavsScript源碼、CSS源碼,給JS代碼添加斷點等

Network:查看header等與網絡連接相關的信息

​ Network中的每一項就是一次請求/響應過程,點擊項可以查看本次請求/響應的報文信息


request - response 模式

瀏覽器 ← TCP連接 → 服務器
發送請求 →
← 做出響應
← 斷開TCP連接 →

​ HTTP協議分為兩部分:請求協議、響應協議,接收請求的一端一定要響應對方

​ 不管是請求還是響應,HTTP協議都是由一個一個簡單的協議項組成,報文中每個協議項都單獨占用一行

​ 協議名:協議內容(值)

HTTP報文格式

HTTP協議的請求報文和響應報文的結構基本相同,由三大部分組成:

  • 起始行(start line):描述請求或響應的基本信息
  • 頭部字段集合(header):使用 key:value 形式更詳細的說明報文
  • 空行
  • 消息正文(entity):實際傳輸的數據,可以是本文、圖片、音視頻等二進制數據,GET請求方式沒有此部分

請求協議報文格式(request)

​ 請求報文中傳遞參數的方式:URL(GET),request Body(POST)

​ 請求行:分為三個部分

METHOD 空格 URL 空格 VERSION 換行
  • 請求方式:如 GET/POST/HEAD/PUT ,表示對資源的操作
  • 請求路徑:通常是一個 URL ,標記了請求方式要操作的資源的路徑
  • 協議版本:表示報文使用的 HTTP 協議版本

請求行單獨占一行;請求路徑不包含域名

​ 請求頭:請求頭是所有當前需要用到的協議項的集合

​ 協議項就是瀏覽器在請求服務器的時候事先告訴服務器的一些信息,即事先約定

​ 常見的請求頭有:

​ host:當前URL中要請求的服務器主機名(域名)

​ accept-encoding:聲明瀏覽器支持的壓縮編碼類型,如gzip

​ accept_charset:瀏覽器支持的字符集

​ referer:表示此次請求來自哪個網址

​ accept-language:可接收的語言類型,有權重之分

​ cookie:如果當前請求的服務器在瀏覽器中設置了cookie,當瀏覽器再次請求該服務器時會傳遞此數據

​ user-agent:用戶代理,當前發起請求的瀏覽器內核信息

​ accept:瀏覽器可接收的數據類型,如txt/html,image/img

​ content-length(POST):當前要提交數據的長度(字節)

​ if-modified-since(GET):請求某個資源文件時,詢問此資源文件是否被修改過

​ 空行:分隔請求頭和請求主體

​ 請求主體:瀏覽器發送給服務端的數據

​ 參數格式:?參數1=值1&參數2=值2&參數3=值3&......

​ 二進制數據,如圖片

GET和POST的區別
  • GET是從服務器上獲取數據,POST是向服務器傳送數據

  • GET把參數加到URL中,POST把數據加到表單中

  • GET傳送的數據量較小,不能大於2KB,POST傳送的數據量大

  • GET安全性較低,POST更安全,但GET執行效率更好

做數據查詢時使用GET方式,做數據添加、修改、刪除或數據包含機密信息時使用POST方式

響應協議報文格式(response)

​ 響應行:分為三個部分

VERSION 空格 STATUS CODE 空格 REASON 換行
  • 協議版本:表示報文使用的 HTTP 協議版本

  • 狀態碼:三位數,用代碼表示處理的結果

    • 2xx:請求被成功接收;200:請求已成功
    • 3xx:重定向,要完成請求需要進一步操作;301:永久重定向,302:臨時重定向
    • 4xx:客戶端錯誤;403:收到請求但拒絕提供此服務,404:請求資源不存在,408:請求超時
    • 5xx:服務器錯誤;500:服務器發生不可知的錯誤,503:服務器當前不能處理請求,一段時間后可能恢復
  • 狀態描述:作為數字狀態碼的補充,是更詳細的解釋文字

​ 響應頭:需要用到的協議項的集合

​ 常見的響應頭有:

​ server:服務器主機信息

​ date:響應時間

​ last-modified:文件最后修改時間

​ content-length:響應主體的長度(字節)

​ content-type:響應內容的數據類型,如text/html,image/png

​ location:重定向,解析到此項時立即跳轉,不會再解析后面的內容

​ refresh:重定向(刷新),解析到此項時准備跳轉,刷新一般有時間限制,到時間才跳轉

​ content-encoding:文件編碼格式

​ cache-control:緩存控制,no-cached:不要緩存

​ 空行:分隔響應頭和響應主體

​ 響應主體:服務器返回給瀏覽器的數據


HTTP頭字段

​ 頭字段 key:value 的形式,最后用CRLF換行表示字段結束。如前后端分離時經常遇到要協商傳輸數據的類型,"Content-type:application/json",HTTP頭字段非常靈活,不僅可以使用標准里的 Host、Content 等已有頭,也可以添加自定義頭

頭字段注意事項:

  • 字段名不區分大小寫,字段名里不允許出現空格,可以使用連字符 ‘ - ’ ,不能使用下划線 ‘ _ ’ ,(有的服務器不能解析帶 ‘ _ ’ 的字段),字段名后面必須緊接 ‘ : ’ , ‘ : ’ 后的字段前可以有多個空格
  • 字段的順序沒有意義,可以任意排序不會影響語義
  • 字段原則上不能重復,除非字段本身語義允許

HTTP請求的完整過程

  1. 用戶在瀏覽器輸入地址后回車

  2. 先到本地DNS查找域名對應的IP地址,如果本地DNS中沒有找到,再到DNS服務器查

  3. 首先從瀏覽器緩存中查看,如下可以查看瀏覽器中域名對應IP的解析

chrome://net-internals/
  1. 解析域名對應的IP地址后,瀏覽器就可以發起與服務器的三次握手

  2. 連接建立之后就開始組裝HTTP請求報文,並發送報文

  3. 服務器收到請求報文之后開始解析報文,生成響應數據,發送響應數據

  4. 瀏覽器收到響應后,開始渲染頁面



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM