每次創建好一個 Web 項目,直接在瀏覽器輸入 http://localhost:8080 ;小程序和Android 也是通過 http://localhost:8080/ 訪問到後臺的方法。還記的計算機網絡課上的內容,Http屬於應用層,TCP(傳輸控制協議)、用戶數據報協議(UDP) 屬於傳輸層。
Http 超文本傳輸協議
一種建立在 TCP 上的無狀態連接,用於客戶端和服務器之間的通信,規定了客戶端和服務器之間的通信格式,包括請求 ( request ) 與響應 ( response ) 的格式。【可通過瀏覽器 [F12] ,右鍵開發者工具,選擇 network 查看請求頭與響應頭 】
【工作流程】
1、
客戶端(瀏覽器)發送一個 HTTP 請求,2、
服務端(網站後臺)收到請求開始處理,並將處理的結果返回給客戶端(瀏覽器),3、
客戶端(瀏覽器)對結果進行處理並展示。
【請求方式】
- Web 瀏覽器請求:
- 1-1. 用戶輸入地址後回車。
- 1-2. 瀏覽器拼接 Http 報文併發送請求給服務器。
- 1-3. 服務器處理請求後,發送響應報文給瀏覽器。
- 1-4. 瀏覽器解析響應報文並使用渲染引擎顯示到界面。
- APP 客戶端請求:
- 2-1. 用戶點擊按鈕等控件或者自動觸發網絡請求。
- 2-2. Android 代碼調用拼裝 HTTP 報文併發送到服務器。
- 2-3. 服務器處理請求後發送響應報文給手機。
- 2-4. Android 代碼處理響應報文並作出相應的數據處理。
【重點解釋】 - 客戶端:發送請求,獲取資源。
- 服務器:接收處理請求,提供資源響應。
- 報文。
【報文】
報文是在 HTTP 應用程序之間發送的數據塊,這些數據塊以一些文本的元信息(meta 標籤中的信息)開頭,描述了報文的內容和含義。由 3 部分組成,①起始行:對報文進行描述。②首部(header):屬性設置 。③主體。
- 請求報文。
起始行:
請求方法<method>、請求路徑<path>、HTTP版本<HTTP version>
首
部:
包含許多鍵值對,對響應數據的一些格式信息。
主
體:
- 響應報文。
起始行:
HTTP版本<HTTP version>、狀態碼<status code>、原因短句<reason-phrase>
首
部:
包含許多鍵值對,對響應數據的一些格式信息。
主
體:
{ 請求方法 }
常用的是 Get 以及 POST 。還有 PUT 、DELETE、HEAD 等方法。
# GET (冪等操作)
Get-1. 報文中不發送主體,主在請求資源。
Get-2. 通過 @Path 獲取參數。
# POST
Post-1. 報文中的主體內容發送給服務器的內容,主在增加和修改。
Post-2. 通過 @Field 獲取參數。
# PUT (冪等操作)
Put-1. 報文中的主體內容發送給服務器的內容,主在修改。
Put-2. 通過 @Path 獲取參數。通過 @Field 獲取參數。
# DELETE (冪等操作)
Delete-1. 報文中不發送主體,主在刪除資源。
Delete-2. 通過 @Path 獲取參數。
# HEAD
Head-1. HEAD 與 GET 的使用相同,報文中沒有主體。
Head-2. 主在用於下載需求,返回的 Headers 中有下載內容的大小,可用於顯示進度。
冪等操作:請求一次和請求多次的結果是一樣的。
返回的狀態碼
狀態碼是對結果進行類型化的描述的,大致分1、2、3、4、5等5類。
接觸最多的狀態碼就是 404,其次還有 400、500、415等。
- 404 是請求的資源不存在。
- 400 客戶端請求錯誤。
- 500 服務器內部錯誤。
- 415 請求格式錯誤。
- 1xx :臨時性消息。
100:繼續發送。
101:正在切換協議。
- 2xx :成功性消息。
200:OK。
201:創建成功。
- 3xx :重定向問題。
301:域名永久移動。
302:暫時移動。
303:內容未改變,請求被重定向到客戶端本地緩存。
- 4xx :客戶端錯誤。
400:客戶端請求錯誤,服務器不理解請求的語法。
401:需要進行身份驗證。
403:服務器拒絕訪問。
- 5xx :服務器錯誤。
503:服務不可用。
報文的首部(Headers)
首部字段,主要分爲以下幾類:
- 通用首部 ==> 提供了與報文相關的最基本的信息。
- 請求首部 ==> 在請求報文中有意義的內容
requestCode-1. Host:服務器的主機名與端口號,在目標服務器上定位子服務器的。
requestCode-2. Accept:告訴服務器,客戶端接收的類型。
- 響應首部 ==> 在響應報文中有意義的內容。
- body ==> 描述 主題的內容。
請求與響應都可以包含的內容:
1、Content-Type:實際返回內容的類型。text/html(html文本)、x-www-form-urlencoded(純文本)、multitype/form-data(二進制文件)、application/json,image/jpeg,application/zip。