HTTP協議

HTTP通信模型

這裏寫圖片描述

特點

  • 支持客戶/服務器模式
  • 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑
  • 靈活:HTTP允許傳輸任意類型的數據對象
  • 無連接:每次連接只處理一個請求,服務器處理完客戶的請求並收到客戶的應答後即斷開連接
  • 無狀態: 對事務的處理沒有記憶能力,如果後續處理需要前面的信息則必須重傳

URL

統一資源定位符是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。

http://www.xxx.com:8080/abc/test.html?username=salute&password=123456#name

  1. 協議部分
    該URL的協議部分爲“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在”HTTP”後面的“//”爲分隔符

  2. 域名部分
    該URL的域名部分爲“www.xxx.com”。一個URL中,也可以使用IP地址作爲域名使用

  3. 端口部分
    跟在域名後面的是端口,域名和端口之間使用“:”作爲分隔符。端口不是一個URL必須的部分,如果省略端口部分,將採用默認端口

  4. 虛擬目錄部分
    從域名後的第一個“/”開始到最後一個“/”爲止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/abc/”

  5. 文件名部分
    從域名後的最後一個“/”開始到“?”爲止,是文件名部分,如果沒有“?”,則是從域名後的最後一個“/”開始到“#”爲止,是文件部分,如果沒有“?”和“#”,那麼從域名後的最後一個“/”開始到結束,都是文件名部分。本例中的文件名是“test.html”。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認的文件名

  6. 參數部分
    從“?”開始到“#”爲止之間的部分爲參數部分,又稱搜索部分、查詢部分。本例中的參數部分爲“username=salute&password=123456”。參數可以允許有多個參數,參數與參數之間用“&”作爲分隔符。

  7. 錨部分
    從“#”開始到最後,都是錨部分。本例中的錨部分是“name”。不是一個URL必須的部分


HTTP請求

請求的三部分:請求行,消息報頭,請求正文

  • 請求行:由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔
  • 消息報頭:由關鍵字/值對組成,每行一對,用:分隔
  • 空行:最後一個消息報頭和正文之間是一個空行,GET請求沒有正文
  • 請求正文

這裏寫圖片描述

請求方法

GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE。

  • GET:請求指定的頁面信息,並返回實體主體。
  • HEAD:類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
  • POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
  • PUT:從客戶端向服務器傳送的數據取代指定的文檔的內容。
  • DELETE:請求服務器刪除指定的頁面。
  • CONNECT:HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。
  • OPTIONS:允許客戶端查看服務器的性能。
  • TRACE:回顯服務器收到的請求,主要用於測試或診斷。

GET方法

GET方法是HTTP協議中最常見的請求方式,當客戶端需要從服務器中讀取文檔時,往往使用GET方法。GET方法要求服務器URL指定的文檔內容。而內容部分,按照HTTP協議規定,放在響應報文的正文部分。由於URL被限制了長度,因此GET方法不適合用於上傳數據。同時在瀏覽器中,通過GET方法來獲取網頁時,參數會顯示在瀏覽器地址欄上,因此保密性很差。

POST方法

POST方法運行客戶端給服務器提供比較多的信息。POST方法將請求參數封裝在HTTP請求數據中,而且長度沒有限制,因爲POST攜帶的數據,在HTTP的請求正文中。


HTTP響應

HTTP響應由三部分組成,分別是:狀態行、消息報頭、響應正文。和HTTP請求唯一的區別就是第一行的請求行,變成了狀態行。

HTTP/1.1 200 OK                   // 狀態行
Date: Fri, 22 May 2009 06:07:21 GMT          // 消息報頭
Content-Type: text/html; charset=UTF-8
                                          // 消息報頭後必須有空行
<html>                                // 響應正文, 服務器給客戶端的文本信息
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>

HTTP狀態碼

1xx:表示服務器正在處理
2xx:成功,請求被正確的理解或者處理
3xx:重定向
4xx:客戶端錯誤,客戶端的請求,服務器無法理解。
5xx:服務器錯誤,服務器未能實現的合法請求。

常見狀態碼
200 OK: 客戶端請求成功
400 Bad Request: 請求報文有語法錯誤
401 Unauthorized: 未授權
403 Forbidden: 服務器拒絕服務
404 Not Found: 請求的資源不存在
500 Internal Server Error: 服務器內部錯誤
503 Server Unavailable: 服務器臨時不能處理客戶端請求


HTTP工作原理

  1. 客戶端連接到web服務器:

    一個http客戶端(瀏覽器)與web服務器的http端口(80)建立一個TCP套接字連接
    
  2. 發送http請求:

    通過tcp套接字,客戶端向web服務器發送一個文本的請求報文,由請求行、請求頭部、空行和請求正文組成
    
  3. 服務器接受請求並返回http響應:

    web服務器解析請求,找到客戶端,將資源複本寫回tcp套接字,由狀態行,響應頭部,空行和響應數據組成
    
  4. 釋放tcp連接:

    若connecttion模式爲close則爲服務器主動關閉,模式爲keepalive則連接會保持一段時間,在這段時間內可以繼續進行通信
    
  5. 客戶端解析HTML內容:

    解析狀態行,查看是否成功的狀態代碼。
    解析相應頭,可以理解爲協議
    讀取響應數據,根據HTML語法對其格式化顯示在瀏覽器窗口
    

發佈了31 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章