文章目錄
HTTP
Http用於客戶端和服務器之間的通信,請求訪問文本或圖像資源的一端稱爲客戶端,而提供資源的一方稱爲服務器端。在兩臺計算機之間使用 HTTP 協議通信時,在一條線路上必定有一端是客戶端,另一端是服務器端
Http 協議規定,請求必須從客戶端發出,最後服務器端響應該請求並返回。
HTTP 請求
1,請求方法,有 get ,post ,這兩種最常見,還有 PUT ,DELETE 等
2,請求 Url:統一資源定位符。由 協議+主機+路徑+參數構成
3,是協議名稱和版本號,用來提示客戶端使用的 HTTP 協議功能
1.0:發送請求,創建一次鏈接,獲得一個資源,鏈接斷開
1.1:發送請求,創建一次鏈接,獲得多個資源,鏈接斷開
4,報文頭包含很多屬性,格式爲 屬性名:屬性值,服務端根據此獲取客戶端的嘻嘻
5,post 提交的數據
HTTP 響應
1,報文協議和版本
2,狀態和描述碼
3,響應頭:由多個屬性組成
4,響應體:即我們需要的數據
HTTP 的特點
1,支持(C/S)客戶端/服務器模型
2,簡單快速,發起請求時,只需要傳入強求方法和路徑,常用的有 GET,POST ,PUT 等。
3,靈活,http 運行傳輸任意類型的數據對象,正在傳輸的類型又 Content-Type 加以標記,常見的取值如下:
Content-Type | 解釋 |
---|---|
text/html | HTML格式 |
text/plain | 純文本格式 |
text/xml | XML格式 |
image/gif | gif圖片格式 |
image/jpeg | jpg圖片格式 |
image/png | png圖片格式 |
application/xhtml+xml | XHTML格式 |
application/xml | XML數據格式 |
application/atom+xml | Atom XML聚合格式 |
application/json | JSON數據格式 |
application/pdf | pdf格式 |
application/msword | Word文檔格式 |
application/octet-stream | 二進制流數據(如常見的文件下載) |
application/x-www-form-urlencoded | 中默認的encType,form表單數據被編碼爲key/value格式發送到服務器(表單默認的提交數據的格式) |
multipart/form-data | 在 Web 表單文件上傳時使用 |
multipart/byteranges | 狀態碼 206(Partial Content,部分內容)響應報文包含了多個範 圍的內容時使用 |
4,無連接
無連接的含義是限制每次連接只能處理一個請求,服務器處理完客戶端的請求,然後響應,並受到應答之後就可以斷開連接,這種方式可以節省傳輸時間。
5,無狀態
HTTP 協議是無狀態協議,無狀態是指對事務處理沒有記憶能力。壞處是,如果以後要用到就必須重新重新獲取。好處是後續鏈接不需要提供之前提供的信息,響應比較快。爲了解決 HTTP 的無狀態特性,出現了 Cookie 和 Session 技術。
Cookie
HTTP 本身是沒有狀態的,所以就出現了Cookie,Cookie 是一小段的文本信息,key value 格式,客戶端向服務器發起請求後,如果服務器需要記錄該用戶的狀態,就會向客戶端返回一個 Cookie,客戶端會把這個 Cookie 保存起來,當再次請求時,需要帶上Cookie提交給服務器,以此來辨認身份。
Session
這個不太瞭解,但是用過這個東西。咋獲取驗證碼的時候,進行請求,服務器會返回一個 Session ,並且發送一個驗證碼。客戶端將拿到的 Session 保存,並等待驗證碼。驗證碼到了後再次進行請求,在請求頭中加入 Session進行請求。如果不加,就算驗證碼是對的,短信驗證也沒有任何作用。
HTTP 狀態碼
狀態碼 | 解釋 |
---|---|
200 | 客戶端請求成功 |
204 | 無內容,服務器成功處理,但未返回內容 |
206 | 服務器完成部分 GET 請求,客戶端進行了範圍請求 |
301 | 永久重定向,請求的資源永久的搬到了其他位置 |
302 | 臨時重定向 |
303 | 臨時重定向,和 302 一樣,303明確客戶端應該使用Get 訪問 |
307 | 臨時重定向,和 302 一樣,POST 不會變爲 GET |
304 | 表示客戶端發送附帶的條件請求,條件不滿足 |
400 | 客戶端語法錯誤,服務器無法理解 |
403 | 服務器手動請求,拒絕提供服務 |
500 | 服務器發送不可預期的錯誤 |
HTTP 工作流程
1,建立 TCP/IP 連接,客戶端與服務器通過Socket三次握手進行連接
2,客戶端向服務器發起 HTTP 請求,
3,客戶端發送請求頭信息,請求內容,最後一行留白,標誌請求完畢
4,服務器做出響應並返回HTTP響應,標識對客戶端請求響應,例如:HTTP/1.1 200 ok
5,釋放 TCP 連接
6,客戶端解析響應體中的數據
HTTP與 TCP/IP 的區別
TCP/IP 是傳輸層協議,主要解決數據在網絡中如何傳輸。
HTTP 是應用層,主要解決如何包裝數據,
表格來源於網絡
HTTP 的三次握手和四次揮手
三次握手:客戶端給服務器發送數據之前,有三次握手,成功後纔可以傳輸數據。
1,客戶端先發送 SYN 碼,客戶端請求和服務端建立連接。
2,服務端接收到 SYN 碼,在發送 SYN + ACK 碼,我們可以建立連接
3,客戶端接收到 ACK 碼後,驗證 ACK 是否正確,如果正確則建立數據連接,雙方數據發送通道都將開啓。
四次揮手:
1,當客戶端無數據傳輸了,發送 FIN 碼告訴服務器我發送完畢了
2,服務器收到後,返回給客戶端 ACK 碼,表示可以關閉數據通道了
3,服務器發送完畢後,發送一個 FIN 給客戶端,表示數據發送完畢
4,客戶端接收完畢後,通過發送 ACK 碼,告訴服務器,數據接收完畢,你可以關閉
HTTPS
超文本傳輸協議,默認端口 443,HTTPS 有 SSL/TLS+HTTP 協議構建的可進行加密傳輸,身份認證的網絡協議,比 HTTP 安全很多。
在 Android 9.0 後,google 禁用了 http 請求,相比於 http,他不在透明,但是也怎加了額外的操作,所以效率上會慢一點
SSL 和 TLS
SSL :指的是安全套解層
TLS:指的是安全層傳輸協議
他們的作用是對通信進行加密,從而建立安全的通信線路
對稱加密和非對稱加密
對稱加密
對稱加密是指加密與解密使用同一個祕鑰的加密算法。
非對稱加密
非對稱加密是兩個祕鑰,公鑰和私鑰,公鑰相當於一把鎖,而私鑰相當於鑰匙。這個鎖可以任意的公佈,如果有人要發消息,使用這把鎖加密在發送。接收方用自己的私鑰打開。問題:如何嚴責公鑰是否是正真的公鑰,可能在發送的過程中已經被篡改。
證書加密
服務器在使用證書加密直接需要去證書頒發機構申請該服務器的證書,在 HTTPS 請求的過程中服務器端將會把證書發送給客戶端,客戶端進行驗證,以此來確定服務器的身份。
HTTPS 工作流程
1,客戶端發起 HTTPS 請求,鏈接到服務器的 443 端口
2,服務器響應請求,並將證書發送到客戶端
3,客戶端使用機構認證的公鑰認證證書,並重證書中取出 Service 端公鑰
4,客戶端 使用公鑰加密一個隨機祕鑰,並傳到 服務器
5,服務器使用 私鑰解密出隨機祕鑰
6,通信雙方使用隨機祕鑰爲對稱祕鑰進行加密解密
HTTP 和 HTTPS 區別
1,http 是明文傳輸,https 是密穩傳輸
2,默認端口號不同,http 是 80,https 是 443
3,https 請求過程中需要 CA 證書驗證身份以保證客戶端請求到服務器返回的響應式來自服務器端,http 則不需要 CA 證書
4,https = http+ 加密+認證+完整性保護
5,https 的效率比較低,不如 http
PS 區別
1,http 是明文傳輸,https 是密穩傳輸
2,默認端口號不同,http 是 80,https 是 443
3,https 請求過程中需要 CA 證書驗證身份以保證客戶端請求到服務器返回的響應式來自服務器端,http 則不需要 CA 證書
4,https = http+ 加密+認證+完整性保護
5,https 的效率比較低,不如 http
如有問題,還請指出,謝謝!