主頁 > 軟體設計 > 692-詳解HTTP和HTTPS協議

692-詳解HTTP和HTTPS協議

2021-10-18 14:08:44 軟體設計

HTTP協議簡介

HTTP是請求應答式協議:客戶端發給請求的訊息是請求訊息,服務器回傳給客戶端的是回應訊息,請求訊息和回應訊息是成對的
服務器不會主動發訊息給客戶端,請求訊息都是客戶端發給服務器,服務器都是被動回應的,
在這里插入圖片描述
tcp建立的是一條傳輸的通道,通道上傳輸的內容是由http協議定義的

我們舉個例子:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
網址的第一部分是http或者https協議名
第二部分是命名
第三部分是請求部分的頁面的相對地址
我們輸入域名,客戶端會把域名資訊發送給DNS服務器決議,對域名決議出對應的IP地址,回傳給客戶端,客戶端拿到IP之后,向IP所在的服務器請求,請求服務器把頁面的資源資訊回傳給客戶端,

HTTP協議的特點

在這里插入圖片描述
長連接的報文的頭部表示:
在這里插入圖片描述
意味著請求和回應處理完之后,TCP通道不需要關閉,

短連接的報文的頭部表示:
connection close
表示請求得到回應后,就關閉TCP的通道

無狀態:http不知道當前的請求和之前的請求是來自同一個客戶端的

現在,我們訪問的基本都是動態的網頁,有互動性,后面的請求對前面的請求有依賴性, http協議在1.0 1.1版本后,服務器回應的時候會添加一個session資訊,客戶端的下一次請求會把session資訊加上,發給服務器,
在這里插入圖片描述

HTTP協議的訊息結構

在這里插入圖片描述
我們登錄一個頁面,看看登錄的請求訊息結構:
在這里插入圖片描述
上圖中藍色的部分是請求頭(header)
在這里插入圖片描述
因為剛才請求的是登錄的資訊,賬戶密碼之間是通過&區分的

我們現在看看回應的訊息結構:
在這里插入圖片描述

在這里插入圖片描述回應的頭部資訊如下:
在這里插入圖片描述
然后是空行,然后就是物體:服務器回傳html頁面的內容:
在這里插入圖片描述
在這里插入圖片描述
為什么上圖顯示的是這樣,是因為圖片和其他資源是根據其他的請求來去獲取的,

舉個例子:我們客戶端在瀏覽器輸入的只是一個網址,但是實際上背后和服務器之間,一個頁面是有多少個請求,是取決于這個頁面上有多少個資源,一個頁面很有可能是多個資源:圖片的資源,html檔案,CSS格式,文本,程式處理結果,它們各自都需要一個請求和回應,
客戶端會把多次服務器回應的結果合在一起顯示出來,所以我們看到的是完整的頁面
在這里插入圖片描述

HTTP各個版本演變程序

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

HTTP協議請求方法

在這里插入圖片描述
第一部分的POST是請求的方法
每一個部分之間用空格隔開
第二部分是URL的地址:(統一資源定位:請求的這個資源,頁面,圖片,是在服務器上的哪個位置)
在這里插入圖片描述
第三部分是:HTTP請求和版本
在這里插入圖片描述
請求方法:
在這里插入圖片描述
打開首頁:用的是GET方法:
****

HEAD:
在這里插入圖片描述
在這里插入圖片描述
回應的只有頭部資訊,沒有body回應體資訊了,
PUT:更新,客戶端向服務器指定位置更新內容

DELETE:客戶端請求服務器洗掉掉我URL所標識的資源,比如說洗掉服務器某個位置的圖片,但是這個方法存在不安全性,會被有的站點禁用,
在這里插入圖片描述
在這里插入圖片描述
沒有權限洗掉服務器上的圖片,這個方法被禁用了,

TRACE:測驗診斷
CONNECT:把串行的形式改成管道或者代理服務器的方式,在1.1版本后開始的,比如說,一個長連接,有很多請求過去,是串行的,第一個請求沒有處理完,第二個請求是沒有辦法發出去的,如果是改成管道的方式,那么第一個請求沒處理完,其他請求也可以過去,

OPTIONS:可以去查這個URL資源在服務器上是支持哪些方法
在這里插入圖片描述

在這里插入圖片描述

GET和POST的區別:

1、功能不一樣
GET方法是:客戶端從服務器某個位置獲取資源資料,比如說打開首頁,獲取首頁的資源到客戶端,
POST方法是:客戶端提交資料給服務器,比如說,登錄,注冊,提交表單資料給服務器,
2、引數
GET方法的引數是放在URL地址中的:
在這里插入圖片描述
登錄也可以使用PUT方法:實作的時候引數在URL中的:
在這里插入圖片描述
POST方法的引數在報文中的body部分傳過去的:
在這里插入圖片描述
POST方法的安全性更高,不通過抓包工具是看不到的,而且可以加密的
GET方法:引數是用戶可見的,安全性較低

3、傳送的資料量
GET請求傳送的資料量比較小:不超過2KB
POST請求傳送的資料量比較大:原則上沒有限制,和web服務器的版本有關系,IF4的最大限制資料大小是80KB,IF5的最大限制請求資料的大小是100KB

HTTP協議常見請求首部欄位

在這里插入圖片描述

在這里插入圖片描述
請求頭可以包含很多資訊:
在這里插入圖片描述
這部分往往是通過客戶端header告訴服務器我客戶端的情況

我們現在訪問百度:
在這里插入圖片描述
Host變成是域名了,

服務器想知道當前請求和之前的請求有沒有關系,可以發送Cookie給客戶端,客戶端可以把這個資訊加到請求訊息中,服務器就可以進行判斷了
http本身不加密,我們通過自己的應用程式的手段去加密

HTTP協議回應狀態碼

在這里插入圖片描述
回應頭:補充回應的附加的資訊,包括服務器的資訊,服務器對客戶端的附加要求,

我們來抓包看看:
在這里插入圖片描述
在這里插入圖片描述
第一行是狀態行,包括很多部分,以空格隔開,
HTTP/1.1是協議的版本號
200是狀態碼
OK是狀態描述

在這里插入圖片描述
藍色部分是回應頭
然后是空行
然后是回應報文的內容(頁面回傳資訊),
在這里插入圖片描述
回應的狀態碼:
在這里插入圖片描述
范圍是:100-599
200只是代表客戶端的請求處理成功,不代表服務器對業務邏輯的處理是成功的,
比如說,登錄業務,登錄是成功還是失敗,服務器是不管的,都是回傳200,不管輸入密碼成功還是錯誤,

204:沒有物體部分的回傳,或者是不允許回傳物體部分的資訊,客戶端的頁面不會變更,還是跟原來的一樣,
206:回傳的部分的請求,客戶端在請求的時候在頭部資訊加請求的范圍,從多少位元組到多少位元組,服務器回傳的結果就是206,回傳的是客戶端指定要求的資訊,并不是回傳所有內容,

3xx:客戶端請求的資源很有可能存放的位置變更了,資源和URL地址變更了,要重新定位到另外一個地方:301:客戶端請求的資源資訊是永久的變更到那個地方了,比如說,客戶端是做標簽,存的是以前的URL資訊,301的回應,客戶端會把新的URL資訊給到這里:
在這里插入圖片描述
把請求的head部分去掉
在這里插入圖片描述
也可以處理,但是請求的頁面資訊存了301
用了新的地址替換了原來的地址:
在這里插入圖片描述
加了個/
可以識別出來新的地址是什么,回傳301的錯誤,用新的地址替換原來的地址,而且這個新的地址還是永久性的,這個是目前存放資源的地址,永久性的重定向,

臨時性的重定向:

在這里插入圖片描述
客戶端目前請求的資源只是臨時改變位置,以后還有可能變回原來的URL地址,客戶端如果做了標簽,臨時重定向是不需要改標簽的,

4XX:客戶端引起的錯誤,客戶端輸錯了地址,回傳4XX,
如果客戶端本身沒有權限去請求服務器的資源,要請求資源,更新資源,獲取資源,沒有權限,也是回傳4XX
400:客戶端的請求出現語法錯誤
403:客戶端請求資源的訪問是被服務器拒絕了,服務器不允許你訪問,不需要給出詳細的理由,服務器也可以在物體說明原因,
404:客戶端輸錯了資源的地址
在這里插入圖片描述
在這里插入圖片描述

請求打開一個頁面,但是沒有這個頁面,服務器找不到這個資源資訊,回傳404

5XX:服務器引起的錯誤,服務器沒有實作客戶端的請求造成的
500:服務器內部發生了不可預知的錯誤,或者服務器程式本身有bug
502:連接錯誤,有可能是服務器的服務關閉了,或者是服務器沒有打開或者在維護
503:服務沒有辦法提供給你

502:
在這里插入圖片描述

在這里插入圖片描述
狀態碼被表示的并不是完全真實的,有時候可以去自定義的,程式可以決定按什么狀態碼處理,

HTTP協議常見回應首部欄位

在這里插入圖片描述
回應頭:附加資訊,服務器的資訊,服務器對客戶端的附加要求
在這里插入圖片描述
在這里插入圖片描述
location:表示請求的資源的新的URL地址,一般和3XX一起的,
1.1版本默認的是長連接,

HTTP協議的資料是不加密的

在這里插入圖片描述
我們通過抓包,在請求報頭就可以看到賬戶密碼,都是明文傳輸,安全隱患大在這里插入圖片描述
在這里插入圖片描述

HTTPS協議

在這里插入圖片描述
在這里插入圖片描述
https協議,會帶一把鎖的資訊在這里插入圖片描述
在這里插入圖片描述
HTTPS:通過SSL協議來傳輸的HTTP協議
在這里插入圖片描述
SSL協議(安全套接字協議,為網路通信提供安全,資料完整性的協議)是怎么實作安全性的?
SSL協議屬于應用層的協議,在傳輸層還是走的是TCP協議,
在這里插入圖片描述
在這里插入圖片描述
安全隱患:信的內容被第三方看到,信也有可能被掉包,被篡改,接收人是其他人冒充,
加密是可以防止資訊泄漏,別人即使截獲了,也看不到資訊內容,不知道明文是什么,
解決方法:每個接收人持有合法的證書才可以,和收郵件要出示身份證一樣,
完整性保護也是通過加密來實作的,

加密:對稱加密和非對稱加密
SSL是對稱加密+非對稱加密

此處關于對稱加密和非對稱加密可以看我的另外一篇博客:《資料明文傳輸的安全問題》
對稱加密:(加密的密鑰和解密的密鑰是同一個)
在這里插入圖片描述
HTTPS在傳輸資料的時候采用的是對稱加密算的,
但是接收端和發送端都需要知道演算法和密鑰,演算法好知道,但是密鑰在網路傳輸中是會被第三方截獲,就可以對你的密文解密了,
所以密鑰的傳輸在HTTPS協議中采用的是非對稱加密演算法,

非對稱加密:
安全性非常高,但是比較復雜,操作繁雜,效率低,
在這里插入圖片描述
加密:121x91=11011
解密:11011x11=121121 取前面一半的數字就是明文,
這樣,加密和解密的演算法不是互為冪函式,加密的密鑰和解密的密鑰不是一樣的,叫做非對稱加密,
加密的密鑰事先已經存在于服務端,然后客戶端的代碼上添加生成相應的加密的密鑰的代碼,客戶端編譯運行時自動生成對應的非對稱密鑰

非對稱加密:解密的密鑰是私鑰,加密的密鑰是公鑰,公鑰是開放給用戶的,可以公用的,

HTTPS在傳輸對稱加密的密鑰的時候,使用非對對稱加密對對稱密鑰加密,進行傳輸,既確保了安全性又保證了高效性,
在這里插入圖片描述

HTTP和HTTPS的區別總結

在這里插入圖片描述正是因為HTTPS的效率和性能比HTTP低很多,而且HTTPS生成證書的時候是需要成本的,所以,很多站點:并不是說所有的資料傳輸都是用HTTPS協議,往往是HTTPS和HTTP相結合,對于敏感的資料的傳輸使用HTTPS協議,對于非敏感的資料的傳輸使用HTTP協議!

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/321176.html

標籤:其他

上一篇:如何從curl或githubcli創建webhook

下一篇:HTTP/2流0未在1028MB處完全關閉

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more