1. 程式人生 > >HTTP簡單理解

HTTP簡單理解

  • HTTP含義
    HTTPHyper (Text Transfer Protocol超文字傳輸協議)基於TCP/IP通訊協議來傳遞資料(HTML 檔案, 圖片檔案, 查詢結果等), 是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。HTTP是一個屬於應用層的面向物件的協議。

  • 主要特點

     1、簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。
    
     2、靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。
     
     3.無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
     
     4.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。
     5、支援B/S及C/S模式。
    
  • URI ,URL, URN三者的關聯
    URL:Unified Resource Locator,統一的資源定位符, 例如:
    URN:Unified Resource Naming,統一的資源命名符, 例如:

    URI:Unified Resource Identifier,統一的資源識別符,Web上可用的每種資源如HTML文件、影象、視訊片段、程式等都是一個來URI來定位的

  • HTTP請求
    客戶端傳送一個HTTP請求到伺服器的請求訊息包括以下格式:

     請求行(request line)、請求頭部(header)、空行和請求資料四個部分組成。
     ![HTTP之GET請求訊息的格式](https://img-blog.csdnimg.cn/20181120150616654.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pzdF80MjI=,size_16,color_FFFFFF,t_70)
    

HTTP之POST請求訊息的格式

  • HTTP響應
    HTTP響應也由四個部分組成,分別是:狀態行、訊息報頭、空行和響應正文。
    HTTP響應組成部分

  • 狀態碼
    狀態碼
    常見狀態碼
    200: OK //客戶端請求成功
    400: Bad Request //客戶端請求有語法錯誤,不能被伺服器所理解
    404:Not Found //請求資源不存在,eg:輸入了錯誤的URL,一般是介面拼寫錯誤。
    500: Internal Server Error //伺服器發生不可預期的錯誤,一般是傳參錯誤,或者說後臺的資料庫錯誤

  • HTTP請求方法
    HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
    HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

     GET     請求指定的頁面資訊,並返回實體主體。
     HEAD     類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
     POST     向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
     PUT     從客戶端向伺服器傳送的資料取代指定的文件的內容。
     DELETE      請求伺服器刪除指定的頁面。
     CONNECT     HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。
     OPTIONS     允許客戶端檢視伺服器的效能。
     TRACE     回顯伺服器收到的請求,主要用於測試或診斷。
    
  • HTTP工作原理
    HTTP協議採用了請求/響應模型。客戶端向伺服器傳送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求資料。伺服器以一個狀態行作為響應,響應的內容包括協議的版本、成功或者錯誤程式碼、伺服器資訊、響應頭部和響應資料。
    以下是 HTTP 請求/響應的步驟:

     	1、客戶端連線到Web伺服器
     	一個HTTP客戶端,通常是瀏覽器,與Web伺服器的HTTP埠(預設為80)建立一個TCP套接字連線。
     	
     	2、傳送HTTP請求
     	通過TCP套接字,客戶端向Web伺服器傳送一個文字的請求報文,一個請求報文由請求行、請求頭部、空行和請求資料4部分組成。
     	
     	3、伺服器接受請求並返回HTTP響應
     	Web伺服器解析請求,定位請求資源。伺服器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應資料4部分組成。
     	
     	4、釋放連線TCP連線
     	若connection 模式為close,則伺服器主動關閉TCP連線,客戶端被動關閉連線,釋放TCP連線;若connection 模式為keepalive,則該連線會保持一段時間,在該時間內可以繼續接收請求;
     	
     	5、客戶端瀏覽器解析HTML內容
     	客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態程式碼。然後解析每一個響應頭,響應頭告知以下為若干位元組的HTML文件和文件的字符集。客戶端瀏覽器讀取響應資料HTML,根據HTML的語法對其進行格式化,並在瀏覽器視窗中顯示。
    
  • GET和POST請求的區別

      (1)瀏覽器中如何發起GET請求:
        在位址列中輸入地址、SRC/HREF屬性、超連結跳轉、JS跳轉、GET方式提交表單、AJAX-GET請求
       (2)瀏覽器中如何發起POST請求:
     	POST方式提交表單、AJAX-POST請求
     
       (3)GET請求把請求資料追加在請求URI後面,以?k=v&k=v格式
         POST請求把請求資料放在請求訊息主體中,以k=v&k=v格式
     	HTTP協議規定k=v中的中文和特殊標點都必須進行編碼。
       (4)瀏覽器/伺服器對請求URI總長度都有長度限制(宣告:HTTP協議沒有對傳輸的資料大小進行限制,HTTP協議規範也沒有對URL長度進行限制。),如1024位元組——GET請求資料長度有限制,中文的話不能超過幾十個;請求訊息主體沒有長度限制——POST請求沒有資料長度限制,可用於檔案上傳。
       (5)二者語義上不同:GET表獲取,POST表傳遞
       (6)GET方式提交資料,會帶來安全問題,比如一個登入頁面,通過GET方式提交資料時,使用者名稱和密碼將出現在URL上,如果頁面可以被快取或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該使用者的賬號和密碼.
    

《參考文件》關於HTTP協議,一篇就夠了