概念
HTTP–Hyper Text Transfer Protocol,超文本傳輸協議;是一種建立在TCP上的無狀態連接(短連接)。
整個基本的工作流程是:客戶端發送一個HTTP請求(Request ),這個請求說明了客戶端想要訪問的資源;服務端收到請求之后,服務端開始處理請求,并根據請求運行相應的邏輯,然后訪問資源,最后通過發送HTTP響應(Response)把結果返回給客戶端。
其中一個請求的開始到一個響應的結束稱為事務,當一個事務結束后會在服務端添加一條日志。
無狀態:
http協議為了保證服務器的內存,不會維持客戶端發過來的請求;即同一個客戶端的這次請求和上次請求是沒有對應關系。對于服務器來說,它并不知道這兩個請求來自同一個客戶端。例如:一個瀏覽器在短短幾秒之內兩次訪問同一接口時,服務器不會因為已經給它發過應答報文而不接受第二次服務請求。
為了解決這個問題, Web程序引入了Cookie機制來維護狀態。
短連接:
http1.0 默認使用短連接,就是:客戶端和服務端每進行一次http操作,就建立一次連接,任務結束就中斷連接。
建立連接–請求&響應–關閉連接
短連接中又包含:持久連接和非持久連接
非持久連接:
非持久連接有一個很大的缺點就是,每一個http請求都需要建立一個TCP連接 (http 1.0版本)
持久連接:
HTTP 1.1默認進行持久連接keep-alive,當TCP連接建立成功,并且在一次請求和響應完成后TCP不會立刻斷開,會有一個超時時間keep-alive,在超時時間到期后TCP連接才會斷開
一、URL結構
HTTP使用統一資源標識符(URL)來建立連接和傳輸數據,URL包含了用于查找某個資源的信息。
URL作用:通過URL可以到達任何一個地方尋找需要的資源,比如文件、音樂、圖片等等;URL是Internet上的地址簿,定位網絡資源的地址。
URL一般由以下部分構成:
https://code-api-pc.dao3.fun:443/map/tab/maps?offset=4&limit=32&tabKey1=mapPotential&orderBy=0
1.協議部分
該URL的協議部分為https:,表示網頁用的是HTTPS協議,后面的//為分隔
2.域名部分
域名是code-api-pc.dao3.fun,發送請求時,需要向DNS服務器解析IP;解析之后會得到類似我們通過ping得到的ip地址,如192.168.16.106。極端情況下,如果為了優化請求,可以直接用IP作為域名使用
3.端口部分
域名后面的443表示端口,和域名之間用:分隔,端口不是一個URL的必須的部分。使用https協議時,如果端口是443,可以省略不寫;與之相關聯的是http的默認端口是80。
4.虛擬目錄部分
從域名的第一個/開始到最后一個/為止,是虛擬目錄的部分。其中,虛擬目錄也不是URL必須的部分,本例中的虛擬目錄是/map/tab/
5.文件名部分
從域名最后一個/開始到?為止,是文件名部分;本例中的文件名是maps
6.查詢條件部分
從?開始到結束的部分是參數部分,又稱為搜索部分、查詢部分。本例中的參數是offset=4&limit=32&tabKey1=mapPotential&orderBy=0,例子中有多個參數,各個參數之間用&作為分隔符。
**7.擴展:**有的鏈接會攜帶錨點,其作用是定位到網頁的某一個位置,例如通過鏈接直接定位到購物網站的秒殺活動的顯示位置
二、HTTP 中 Request & Response 介紹
Request
HTTP的請求包括:請求行(request line)、請求頭部(header)、空行 和 請求數據 四個部分組成
1.請求行
POST為請求類型,/ugc/creator/content/publish為要訪問的資源,HTTP2.0是協議
2.請求頭部
從第二行起為請求頭部,Host指出請求的目的地(主機域名);User-Agent是客戶端的信息,它是檢測瀏覽器類型的重要信息,由瀏覽器定義,并且在每個請求中自動發送。
3.空行
請求頭后面必須有一個空行
4.請求數據
請求的數據也叫請求體
Response
一般情況下,服務器收到客戶端的請求后,就會有一個HTTP的響應消息,HTTP響應也由4部分組成,分別是:狀態行、響應頭、空行 和 響應體。
1.狀態行
狀態行由協議HTTP2.0、狀態碼200、狀態消息OK組成
2.響應頭
響應頭是客戶端可以使用的一些信息,如:date(生成響應的日期)、content-Type(類型及編碼格式)等等
3.空行
響應頭和響應體之間必須有一個空行
4.響應體
響應正文,例子中是鍵值對信息
三、HTTP狀態碼
HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型。
響應分為五類:信息響應(100–199),成功響應(200–299),重定向(300–399),客戶端錯誤(400–499)和服務器錯誤(500–599)
工作中常見的狀態碼:
100:unknownError
200:OK,請求成功
302:重定向;(臨時)服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求
401:請求要求用戶的身份認證
403:Forbidden服務器理客戶端的請求,但是拒絕執行此請求(沒有權限)
404:NotFound服務器無法根據客戶端的請求找到資源(網頁)
500:服務器內部錯誤,無法完成請求