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響應
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上,如果頁面可以被快取或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該使用者的賬號和密碼.