Http http相關知識點詳解
- 學習目標
- HTTP 協議
- TCP/IP
- OSI 七層模型
- TCP
- TCP 3次握手
- TCP 4次揮手
- HTTP 請求回應
- 請求結構
- 請求訊息結構
- 請求方法
- 回應結構
- 回應訊息結構
- 狀態碼
學習目標
- 掌握http協議請求和回應模型
重點 - 掌握Tomcat處理流程
重點
HTTP 協議
超文本傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是一種用于分布式、協作式和超媒體資訊系統的應用層協議,HTTP是萬維網的資料通信的基礎,
HTTP是一個基于TCP的、請求與回應模式的、無狀態的、應用層的協議,
HTTP1.1版本中給出一種持續連接的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用,
TCP/IP
TCP/IP 指:傳輸控制協議 / 網際協議(Transmission Control Protocol / Internet Protocol),
TCP/IP 用于定義計算機如何連入因特網,以及資料如何在它們之間傳輸的標準,
TCP/IP協議不僅僅指的是TCP 和IP兩個協議,而是指一個由FTP、SMTP、TCP、UDP、IP等協議構成的協議簇, 只是因為在TCP/IP協議中TCP協議和IP協議最具代表性,所以被稱為TCP/IP協議,
TCP/IP協議在一定程度上參考了OSI的體系結構,OSI模型共有七層,但是這顯然是有些復雜的,所以在TCP/IP協議中,它們被簡化為了四個層次,
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-a8nQJybV-1640956169449)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211231204307083.png)]](https://img.uj5u.com/2022/01/02/294219020813491.png)
OSI 七層模型
七層模型從上到下依次是:
- 應用層:協議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
- 表示層:資料的表示、安全、壓縮,格式有,JPEG、ASCll、DECOIC、加密格式等
- 會話層:建立、管理、終止會話,對應主機行程,指本地主機與遠程主機正在進行的會話
- 傳輸層:定義傳輸資料的協議埠號,以及流控和差錯校驗,協議有:TCP UDP,資料包一旦離開網卡即進入網路傳輸層
- 網路層:進行邏輯地址尋址,實作不同網路之間的路徑選擇,協議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
- 資料鏈路層:建立邏輯連接、進行硬體地址尋址、差錯校驗等功能,將位元組合成位元組進而組合成幀,用MAC地址訪問介質,錯誤發現但不能糾正,
- 物理層:建立、維護、斷開物理連接,
七層模型傳輸資料程序:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wUSbb5Q9-1640956169453)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211231204559230.png)]](https://img.uj5u.com/2022/01/02/294219020813492.png)

TCP
TCP 傳輸控制協議(Transmission Control Protocol)是一種面向連接的、可靠的、基于位元組流的傳輸層通信協議,
TCP 是為了在不可靠的互聯網路上提供可靠的端到端位元組流而專門設計的一個傳輸協議,
TCP 報文頭
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vqmge9z4-1640956169453)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211231204705557.png)]](https://img.uj5u.com/2022/01/02/294219020813494.png)
上圖中有幾個欄位需要重點介紹下:
(1)序號:seq序號,占32位,用來標識從TCP源端向目的端發送的位元組流,發起方發送資料時對此進行標記,
(2)確認序號:ack序號,占32位,只有ACK標志位為1時,確認序號欄位才有效,ack=seq+1,
(3)標志位:共6個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義如下:
- ACK:確認序號有效,
- FIN:釋放一個連接,
- PSH:接收方應該盡快將這個報文交給應用層,
- RST:重置連接,
- SYN:發起一個新連接,
- URG:緊急指標(urgent pointer)有效,
TCP 3次握手
(1)第一次握手:Client將標志位SYN置為1,隨機產生一個值seq=J,并將該資料包發送給Server,Client進入SYN_SENT狀態,等待Server確認, (2)第二次握手:Server收到資料包后由標志位SYN=1知道Client請求建立連接,Server將標志位SYN和ACK都置為1,ack=J+1,隨機產生一個值seq=K,并將該資料包發送給Client以確認連接請求,Server進入SYN_RCVD狀態, (3)第三次握手:Client收到確認后,檢查ack是否為J+1,ACK是否為1,如果正確則將標志位ACK置為1,ack=K+1,并將該資料包發送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨后Client與Server之間可以開始傳輸資料了,
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rs2iNtOQ-1640956169454)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211231204731217.png)]](https://img.uj5u.com/2022/01/02/294219020813495.png)
TCP 4次揮手
所謂四次揮手(Four-Way Wavehand )即終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務端總共發送4個包以確認連接的斷開, 在socket編程中, 這一程序 由客戶端或服務端任一方執行close來觸發,
(1)第一次揮手:Client發送一個FIN,用來關閉Client到Server的資料傳送,Client進入FIN_WAIT_1狀態 , (2)第二次揮手:Server收到FIN后 ,發送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),Server進入CLOSE_WAIT狀態 , (3)第三次揮手:Server發送一個FIN,用來關閉Server到Client的資料傳送,Server進入LAST_ACK狀態, (4)第四次揮手:Client收到FIN后,Client進入TIME_WAIT狀態,接著發送一個ACK給Server,確認序號為收到序號+1 , Server進入CLOSED狀態, 完成四次揮手,

HTTP 請求回應
請求結構
請求訊息結構
客戶端發送一個HTTP請求到服務器的請求訊息包括以下格式:
- 請求行(request line)
- 請求頭部(header)
- 空行
- 請求資料
下圖給出了請求報文的一般格式:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-V38RNFGe-1640956169455)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211231204814262.png)]](https://img.uj5u.com/2022/01/02/294219020813497.png)
如:
GET / HTTP/1.1
Host: www.csdn.net
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: https://www.csdn.net/
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8
Cookie: uuid_tt_dd=-6852503192799459486_20161230; _ga=GA1.2.851452765.1483110024; UE="starzhangkiss@qq.com"; __guid=253029775.837108528115350700.1516453692677.6106
請求方法
| 方法 | 描述 |
|---|---|
| GET | 請求指定的頁面資訊,并回傳物體主體,資料被包含在URL引數中 |
| POST | 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案),資料被包含在請求體中, |
| DELETE | 請求服務器洗掉指定的頁面, |
| PUT | 從客戶端向服務器傳送的資料取代指定的檔案的內容, |
| HEAD | 類似于get請求,只不過回傳的回應中沒有具體的內容,用于獲取報頭 |
| CONNECT | HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器, |
| OPTIONS | 允許客戶端查看服務器的性能, |
| TRACE | 回顯服務器收到的請求,主要用于測驗或診斷, |
回應結構
回應訊息結構
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yZE8OqLT-1640956169456)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211231204853833.png)]
如:
HTTP/1.1 200 OK
Server: Tengine
Content-Type: text/html
Content-Length: 15154
Connection: keep-alive
Date: Fri, 27 Apr 2018 02:49:12 GMT
X-Powered-By: HHVM/3.11.1
Content-Encoding: gzip
Vary: Accept-Encoding
Via: cache40.l2et2-2[0,200-0,H], cache3.l2et2-2[1,0], cache1.cn548[0,200-0,H], cache4.cn548[1,0] Age: 35292
X-Cache: HIT TCP_HIT dirn:7:245100152 mlen:-1
X-Swift-SaveTime: Fri, 27 Apr 2018 12:24:58 GMT
X-Swift-CacheTime: 86400 Timing-Allow-Origin: *
EagleId: dbee144415248326444025049e
回應頭引數
| 回應答頭 | 說明 |
|---|---|
| Allow | 服務器支持的請求方法(如GET、POST等), |
| Content-Encoding | 檔案的編碼(Encode)方法,只有在解碼之后才可以得到Content-Type頭指定的內容型別, |
| Content-Length | 內容長度,只有當瀏覽器使用持久HTTP連接時才需要這個資料, |
| Content-Type | 檔案MIME型別 |
| Date | 當前的GMT時間,你可以用setDateHeader來設定這個頭以避免轉換時間格式的麻煩, |
| Expires | 應該在什么時候認為檔案已經過期,從而不再快取它? |
| Last-Modified | 檔案的最后改動時間, |
| Location | 表示客戶應當到哪里去提取檔案, |
| Refresh | 表示瀏覽器應該在多少時間之后重繪檔案,以秒計, |
| Server | 服務器名字,由Web服務器自己設定, |
| Set-Cookie | 設定和頁面關聯的Cookie, |
| WWW-Authenticate | 客戶應該在Authorization頭中提供什么型別的授權資訊? |
狀態碼
5種狀態碼
| 分類 | 分類描述 |
|---|---|
| 1 | 資訊,服務器收到請求,需要請求者繼續執行操作(收到信件,還沒看) |
| 2 | 成功,操作被成功接收并處理(收到,并且看過了) |
| 3 | 重定向,需要進一步的操作以完成請求(轉達資訊給第三者) |
| 4 | 客戶端錯誤,請求包含語法錯誤或無法完成請求(發不出去) |
| 5 | 服務器錯誤,服務器在處理請求的程序中發生了錯誤(對方出錯【代碼錯誤】) |
HTTP狀態碼串列
| 狀態碼 | 中文描述 |
|---|---|
| 200 | 請求成功,一般用于GET與POST請求 |
| 201 | 已創建,成功請求并創建了新的資源 |
| 202 | 已接受,已經接受請求,但未處理完成 |
| 204 | 無內容,服務器成功處理,但未回傳內容,在未更新網頁的情況下,可確保瀏覽器繼續顯示當前檔案 |
| 301 | 永久移動,請求的資源已被永久的移動到新URI,回傳資訊會包括新的URI,瀏覽器會自動定向到新URI,今后任何新的請求都應使用新的URI代替 |
| 302 | 臨時移動,與301類似,但資源只是臨時被移動,客戶端應繼續使用原有URI |
| 400 | 客戶端請求的語法錯誤,服務器無法理解 |
| 401 | 請求要求用戶的身份認證 |
| 403 | 服務器理解請求客戶端的請求,但是拒絕執行此請求 |
| 404 | 無法找到資源(網頁),通過此代碼,網站設計人員可設定"您所請求的資源無法找到"的個性頁面 |
| 408 | 服務器等待客戶端發送的請求時間過長,超時 |
| 411 | 服務器無法處理客戶端發送的不帶Content-Length的請求資訊 |
| 415 | 服務器無法處理請求附帶的媒體格式 |
| 500 | 服務器內部錯誤,無法完成請求 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/400512.html
標籤:其他
上一篇:江湖救急筆記——計算機網路
