1. 程式人生 > >HTTP協議詳細分析

HTTP協議詳細分析

就會 cat purpose 分隔 utf-8 tcp/ip 例如 握手 5.0

1、HTTP概述

  1.1、什麽是HTTP?
    它是Hyper Text Transfer Protocol的縮寫。超文本傳輸協議
    它是客戶瀏覽器和web服務器之間的一種一問一答的規則。問答機制/握手機制

  1.2、HTTP版本
    1.0版本:
      創建連接(TCP/IP)
      發送請求
      接收響應
      關閉連接
    1.1版本:
      創建連接(TCP/IP)
      發送請求1
      接收響應1
      發送請求2
      接收響應2........
      請求超時(手動關閉)
    1.1版本比1.0版本多了幾個消息頭
  1.3、特殊說明
    當瀏覽器發現script標簽,link標簽和img標簽時,會自動發出請求。

2、HTTP主要組成

  2.1、請求部分
      請求行
      請求消息頭
      請求正文

  GET /myapp/2.html HTTP/1.1 //如請求行

  Host:"localhost:8080"

  User-Agent:"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"

  Accept:"*/*"

  Accept-Language:"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"

  Accept-Encoding:"gzip, deflate"

  Referer

:"http://localhost:8080/jeecg/logController.do?statisticTabs&isIframe"

  Cookie:"JEECGINDEXSTYLE=hplus; JSESSIONID=051CDE615BD426D727B41B2481B4A1C3; ZINDEXNUMBER=1990"

  Connection:"keep-alive"

  2.2、響應部分
    響應行
    響應消息頭
    響應正文

  HTTP/1.1 200 OK // 響應行

  Cache-Control:"no-cache, no-store"

  Content-Language

:"zh-CN"

  Content-Type:"text/html;charset=UTF-8"

  Date:"Wed, 17 May 2017 02:42:27 GMT"

  Expires:"Thu, 01 Jan 1970 00:00:00 GMT"

  Pragma:"no-cache"

  Server:"Apache-Coyote/1.1"

  Transfer-Encoding:"chunked"

如下圖:

    技術分享

  2.3、消息頭的共性
    (1)頭名稱首字母大寫,多個單詞每個單詞的首字母都大寫。
    (2)多個單詞用-分隔
    (3)名稱和值之間用:分隔
    (4)值和:之間有一個空格
    (5)多個值之間用,分隔
    (6),和值之間也有一個空格
    (7)兩個頭之間用回車分隔


    MIME類型:多用途互聯網郵件擴展類型
    MIME:(Multipurpose Internet Mail Extensions)

3、請求部分詳解
  請求行:GET /myapp/2.html HTTP/1.1
  GET:請求的方式。GET和POST
  /myapp/2.html:請求資源URI。
  

  URI:Uniform Resource Identifier 統一資源標識符
  URL:Uniform Resource Locator 統一資源定位符
  URL: http://localhost:8080/jeecg/logController.do?statisticTabs&isIframe
     協議    主機 端口 URI
  

  HTTP/1.1:協議的版本

  請求消息頭:客戶瀏覽器給服務器的暗語
  Accept:
    告知服務器,瀏覽器所支持的MIME類型。
  Accept-Encoding:
    告知服務器,瀏覽器所支持的壓縮編碼格式。常用的一個GZIP壓縮。
  Accept-Language:
    告知服務器,瀏覽器所支持的語言。例如zh_CN,en_US等等。
  Referer:
    告知服務器,當前請求的來源。註意:只有有來源的才會有此消息頭。
    作用:
      1.投放廣告。
      2.防盜鏈。
  Content-Type:
    告知服務器,請求正文的MIME類型。
  Content-Length:
    告知服務器,請求正文的長度。
  User-Agent:
    客戶瀏覽器的相關信息
  Connection: Keep-Alive
    連接狀態:保持連接
  If-Modified-Since:
    客戶端緩存的最後更新時間。
  Cookie:
    會話管理相關。(非常重要)
  請求的正文:
    什麽時候有,什麽時候沒有,當什麽屬性取什麽值的時候,請求的正文是什麽體現形式?
    POST方式:username=test&password=123 key=value&key=value 在請求體中
    GET方式: username=test&password=123 key=value&key=value 在地址欄中
    表單輸入域中,只要有name屬性的時候,正文內容就會被提交。如果沒有name屬性,則不會被提交.
    正文的體現形式不受請求的方式控制。
    表單的第三個重要屬性:enctype屬性:控制編碼表單的MIME類型
      enctype是有默認值的:application/x-www-form-urlencoded 它對應的表單正文的體現形式就是key=value
      enctype取值為multipart/form-data時,請求正文的體現形式是:
      -----------------------------7df1592a410fc
      Content-Disposition: form-data; name="username"

      test
      -----------------------------7df1592a410fc
      Content-Disposition: form-data; name="password"

      123
      -----------------------------7df1592a410fc
      Content-Disposition: form-data; name="fileone"; filename="C:\Users\zhy\Desktop\請求部分.jpg"
      Content-Type: image/pjpeg

      ??
      -----------------------------7df1592a410fc

4、響應部分詳解
  響應行:HTTP/1.1 200 OK
  HTTP/1.1:使用的協議及版本
  200:響應狀態碼
  常用的狀態碼:
    200 :一切都OK
    302/307 :重定向
    304 :請求資源未改變,使用緩存
    404 :請求資源未找到
    500 :服務器內部錯誤
  OK:狀態碼描述
  響應消息頭:服務器給客戶瀏覽器的暗語
    Location:
      重定向的地址
    Server:
      服務器相關信息
    Content-Type:
      告知瀏覽器,響應正文的MIME類型
    Content-Length:
      告知瀏覽器,響應正文的長度
    Content-Encoding
      告知瀏覽器,響應正文使用的壓縮編碼格式。
    Content-Language:
      告知瀏覽器,響應正文語言。
    Content-Disposition:
      告知瀏覽器,以下載的方式打開。
    Refresh:
      定時刷新
    Last-Modified:
      服務器資源的最後修改時間。當瀏覽器發出請求時,會使用客戶端緩存最後更新時間和該消息頭的值進行比較。如果一致則使用緩存。如果不一致,發送新的請求。
    Set-Cookie:
      會話管理相關(非常重要)
    Expires:-1:設置緩存時間。當設置為-1時,表示不要緩存。時間是以毫秒為單位。
    Catch-Control: no-catch(1.1)//針對http協議1.1版本
    Pragma:no-catch(1.0)//針對http協議1.0版本
  響應的正文:
    和你在瀏覽器右鍵查看源文件,看到的內容是一模一樣的。

HTTP協議詳細分析