国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HTTP協(xié)議(JavaEE初階系列15)

這篇具有很好參考價(jià)值的文章主要介紹了HTTP協(xié)議(JavaEE初階系列15)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

前言:

1.HTTP協(xié)議

1.1HTTP協(xié)議是什么

1.2HTTP協(xié)議的報(bào)文格式

1.2.1抓包工具的使用

1.2.2HTTP請(qǐng)求

1.2.3HTTP響應(yīng)

2.HTTP請(qǐng)求

2.1首行的組成

2.2.1URL的組成

2.2認(rèn)識(shí)“方法”(method)

2.2.1GET方法

2.2.2POST方法

2.2.3GET和POST請(qǐng)求的區(qū)別

2.3認(rèn)識(shí)請(qǐng)求“報(bào)頭”(header)

2.4認(rèn)識(shí)請(qǐng)求正文(body)

3.HTTP響應(yīng)

3.1認(rèn)識(shí)“狀態(tài)碼”

3.2HTTP請(qǐng)求的構(gòu)造

3.2.1直接構(gòu)造

3.2.2html中的特殊標(biāo)簽

3.2.3通過form表單構(gòu)造http請(qǐng)求

3.2.4通過ajax構(gòu)造

3.2.5通過postman構(gòu)造

4.HTTPS

4.1HTTPS是什么

4.2HTTPS的工作過程

4.2.1使用對(duì)稱密鑰

4.2.2引入非對(duì)稱加密

4.2.3引入證書

4.2.4完整流程

4.2.5總結(jié)

4.2.6HTTPSvsHTTP

結(jié)束語:


前言:

在之前的博客中小編給大家簡單的介紹了一下有關(guān)于HTTP協(xié)議的東西,他是屬于應(yīng)用層的一個(gè)廣泛使用的協(xié)議,再應(yīng)用層中主要關(guān)注的是數(shù)據(jù)怎么使用。應(yīng)用層協(xié)議是經(jīng)常需要“自定義”的但是很多時(shí)候也不一定要從0開始設(shè)定,我們也可以基于大佬們?cè)O(shè)計(jì)好的協(xié)議,在這個(gè)基礎(chǔ)上進(jìn)行設(shè)定。這個(gè)協(xié)議就是HTTP,HTTP的應(yīng)用非常廣泛,他之所以這么廣泛就是因?yàn)镠TTP的可制定性非常強(qiáng)。那么我們?cè)谑裁磿r(shí)候可以用到HTTP協(xié)議呢?只要我們?cè)谏暇W(wǎng)的時(shí)候就會(huì)使用到HTTP協(xié)議,比如瀏覽器打開一個(gè)網(wǎng)頁,手機(jī)APP從網(wǎng)絡(luò)上加載一份數(shù)據(jù),微信小程序,支付寶小程序,打開游戲...都是在使用HTTP協(xié)議。所以接下來就和小編一起來學(xué)習(xí)一下HTTP協(xié)議吧!

1.HTTP協(xié)議

1.1HTTP協(xié)議是什么

HTTP的全稱是“超文本傳輸協(xié)議”,是一種應(yīng)用非常廣泛的應(yīng)用層協(xié)議。他是一種“一問一答”這種形式的協(xié)議,一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)響應(yīng)。HTTP往往是基于傳輸層的TCP協(xié)議實(shí)現(xiàn)的,目前我們主要使用的是HTTP1.1。

1.2HTTP協(xié)議的報(bào)文格式

想要仍是報(bào)文格式,就需要借助一些外部工具來把http協(xié)議給顯示出來。這里就涉及到了“抓包工具”,抓包工具本質(zhì)上相當(dāng)于一個(gè)“代理”,借助這樣的代理就可以看到網(wǎng)絡(luò)上傳輸?shù)木唧w數(shù)據(jù)了。在網(wǎng)上有很多抓包工具其中Chrome就內(nèi)置了抓包工具,還有wireshark這里的功能更加復(fù)雜也更加全面,但是小編這里給大家介紹的是fiddler,它一般是只專注于http,所以使用起來比較簡單方便。大家可以自己去網(wǎng)上下載一個(gè),下面小編就直接進(jìn)入fiddler使用的演示了。

1.2.1抓包工具的使用

①fiddler主頁面的展示:
HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

②在界面中左側(cè)是抓到包的列表,當(dāng)雙擊要關(guān)注的包的時(shí)候,右側(cè)就會(huì)顯示詳情,右上是請(qǐng)求,右下是響應(yīng)。?

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

我們按照下面的操作就可以直接打開了。這里點(diǎn)擊Raw就是最原始的http請(qǐng)求的數(shù)據(jù)。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

上面就是一個(gè)完整的http請(qǐng)求,所謂的http請(qǐng)求其實(shí)就是通過代碼構(gòu)造出一個(gè)HTTP格式要求的字符串,在往TCP的socket中寫就可以了。

1.2.2HTTP請(qǐng)求

一個(gè)http請(qǐng)求數(shù)據(jù),包含了4個(gè)部分。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

注意在空行后面可能還會(huì)有正文,但是有的時(shí)候可以沒有正文。

1.2.3HTTP響應(yīng)

有的同學(xué)的響應(yīng)可能是下面的這種二進(jìn)制的,不影響我們只要點(diǎn)擊上面的那一串就可以將其轉(zhuǎn)換成文本格式的了。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

你會(huì)發(fā)現(xiàn)這里的正文就是html代碼,HTTP響應(yīng)就是要顯示的html的本體,瀏覽器拿到這個(gè)http響應(yīng)也就拿到了里面的html就可以顯示了。

這里我們借助了抓包工具fiddler,就看到了HTTP協(xié)議的請(qǐng)求和響應(yīng)的詳細(xì)內(nèi)容了,具體細(xì)節(jié)如下所示:
HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

下面我們就一一來看一下HTTP里面的具體內(nèi)容吧。

2.HTTP請(qǐng)求

2.1首行的組成

如上面抓包的那個(gè)首行所示:
HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

其中HTTP方法描述了這個(gè)方法想要干什么,HTTP方法有很多種,不同的方法,表示的“語義”不同。下面會(huì)給大家一一介紹的。

URL是唯一資源定位符,它描述了網(wǎng)絡(luò)上的唯一的一個(gè)資源。

版本號(hào)就是我們現(xiàn)在使用的HTPP的版本。

2.2.1URL的組成

針對(duì)URL來說大概是由一下這幾個(gè)部分組成。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

比如現(xiàn)在有一家餐廳,如果你要點(diǎn)外賣的話就會(huì)有以下的信息。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

大家可以對(duì)應(yīng)上述的情況來理解一下。?

2.2認(rèn)識(shí)“方法”(method)

在HTTP中有以下幾種方法。

方法 說明
GET 獲取資源
POST 傳輸實(shí)體主體
PUT 傳輸文件
HEAD 獲得報(bào)文首部
DELETE 刪除文件
OPTIONS 詢問支持的方法
TRACE 追蹤路徑
CONNECT 要求用隧道協(xié)議連接代理
LINK 建立和資源之間的聯(lián)系
UNLINE 斷開連接關(guān)系

上述的這么多種方法我們最常見到的就是get和post請(qǐng)求,所以接下來我們來詳細(xì)的看一下這兩個(gè)方法。

2.2.1GET方法

GET的語義是“從服務(wù)器這里拿取數(shù)據(jù)”。我們一般看到的請(qǐng)求都是GET請(qǐng)求。

如上述我們?cè)谒阉鳌八压贰钡臅r(shí)候,我們使用fiddler抓包抓到的也是GET請(qǐng)求。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

GET請(qǐng)求的特點(diǎn):

  • 首行的第一個(gè)部分為GET。
  • URL的query?string可以為空,也可以不為空。
  • header部分有若干個(gè)鍵值對(duì)結(jié)構(gòu)。
  • body部分為空。

2.2.2POST方法

POST方法的語義是“往服務(wù)器里提交東西”,這個(gè)一般是在登錄的時(shí)候或者是在上傳文件的時(shí)候會(huì)出現(xiàn)POST請(qǐng)求,比如我們現(xiàn)在登錄一下一個(gè)網(wǎng)站,然后使用fiddler進(jìn)行抓包。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

并且在POST請(qǐng)求中body一般不為空。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

2.2.3GET和POST請(qǐng)求的區(qū)別

首先GET和POST是沒沒有本質(zhì)區(qū)別的,使用GET場景換成POST一般也是可以的,但是在使用習(xí)慣上存在區(qū)別:

  • 數(shù)據(jù)的傳輸方式:GET請(qǐng)求的數(shù)據(jù)是通過URL傳遞的,即將數(shù)據(jù)拼接到URL的后面,以?分隔,參數(shù)之間以&符號(hào)分隔。因此GET傳輸?shù)臄?shù)據(jù)受限制的,通常在幾千個(gè)字符之內(nèi)。而POST請(qǐng)求則是將數(shù)據(jù)放在HTTP請(qǐng)求的請(qǐng)求體中進(jìn)行傳輸,沒有大小的限制,可以傳輸較大的數(shù)據(jù)量。
  • 數(shù)據(jù)傳輸安全性:GET請(qǐng)求傳輸?shù)臄?shù)據(jù)是明文的,因此數(shù)據(jù)容易被攔截和篡改。而POST請(qǐng)求傳輸?shù)臄?shù)據(jù)放在請(qǐng)求體中,所以相對(duì)安全一些。
  • 緩存:GET請(qǐng)求是可以被緩存的,當(dāng)瀏覽器再次請(qǐng)求同一個(gè)URL時(shí),可以從緩存中直接獲取數(shù)據(jù),加快訪問速度。而POST請(qǐng)求是不可以緩存的,因?yàn)槊看翁峤粩?shù)據(jù)都可能導(dǎo)致服務(wù)器狀態(tài)的改變。
  • 安全性:GET請(qǐng)求的數(shù)據(jù)會(huì)被瀏覽器保存在歷史記錄和服務(wù)器日志中,容易被惡意程序利用。而POST不會(huì)被保存在歷史記錄和服務(wù)器日志中,相對(duì)更加安全。

2.3認(rèn)識(shí)請(qǐng)求“報(bào)頭”(header)

頭部是以鍵值對(duì)的結(jié)構(gòu)組織的,每一個(gè)鍵值對(duì)占一行,鍵和值之間使用冒號(hào)分隔,這里的鍵值對(duì)可有N行,最后會(huì)用空行作為結(jié)束標(biāo)記的。

如下所示:
HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

header中的鍵值對(duì)大多都是HTTP協(xié)議規(guī)定的,當(dāng)然這里也可以添加自定義的鍵值對(duì)。

  • Host:其中第一個(gè)屬性HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)?描述了瀏覽器這個(gè)請(qǐng)求要訪問的服務(wù)器是誰,這里也可以寫端口號(hào)。大多數(shù)情況下host和url是一致的,但是如果當(dāng)前的服務(wù)器不是直接訪問的而是通過“代理”訪問的此時(shí)url和host可能就會(huì)不一樣了。
  • Content-Length:描述了body的長度。如下所示:HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)
  • Content-Type:描述了body數(shù)據(jù)格式。如下所示:

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

在上述中我們可以看到他是以json的形式來組織的,json使用{}表示的,這里面包含了若干個(gè)鍵值對(duì),鍵值對(duì)之間使用,分隔,鍵和值之間使用分隔。如下所示:

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

在content-type中還有一些其他的寫法比如:text/html,text/css,application/javascript,image/jpg,image/png......

  • User-Agent:簡稱UA,它表示瀏覽器/操作系統(tǒng)的屬性。如下所示:

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

這里面就描述了他是Windows?NT 10.0的操作系統(tǒng),64位,并且后面還描述了瀏覽器的版本。?

  • Referer:描述了當(dāng)前這個(gè)頁面,從哪個(gè)頁面跳轉(zhuǎn)來的。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

  • Cookie:它是瀏覽器本地存儲(chǔ)數(shù)據(jù)的一種機(jī)制,Cookie中存儲(chǔ)了一個(gè)字符串,這個(gè)數(shù)據(jù)可能是客戶端自行通過JS寫入的,也可能來自于服務(wù)器。它的本質(zhì)是瀏覽器在本地存儲(chǔ)用戶自定義數(shù)據(jù)的一種關(guān)鍵機(jī)制。他也是通過鍵值對(duì)的形式組織的,鍵值對(duì)之間使用;分隔,鍵和值之間使用=分隔。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

如上所示就是我們?cè)谑褂胒iddler來進(jìn)行抓到的Cookie。他存儲(chǔ)的是字符串,一般是存儲(chǔ)用戶的身份信息,由于客戶端有很多,每個(gè)客戶端提供的服務(wù)可能不一樣,因此服務(wù)器就可以通過Cookie來進(jìn)行區(qū)分,比如客戶端在登錄時(shí)候,服務(wù)器就識(shí)別好客戶端的角色,把角色信息返回給瀏覽器,然后保存在Cookie中,后續(xù)客戶端在訪問的時(shí)候,就會(huì)帶著這個(gè)Cookie,然后服務(wù)器就直接返回?cái)?shù)據(jù)給客戶端。

2.4認(rèn)識(shí)請(qǐng)求正文(body)

我們來使用fiddler進(jìn)行抓包就可以看到正文了。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

3.HTTP響應(yīng)

3.1認(rèn)識(shí)“狀態(tài)碼”

狀態(tài)碼表示訪問一個(gè)頁面的結(jié)果(是成功還是失敗,還是其他的一些情況....)在http中提供的狀態(tài)碼是非常復(fù)雜繁多的,我們看一下下面的這些狀態(tài)碼。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

上面這些雖然有很多,但是會(huì)發(fā)現(xiàn)大概被分成了以下幾大類:

類別 原因短語
1XX Informational(信息性狀態(tài)碼) 接收的請(qǐng)求正在處理
2XX Success(成功狀態(tài)碼) 請(qǐng)求正常處理完畢
3XX Redirection(重定向狀態(tài)碼)? 需要進(jìn)行附加操作以完成請(qǐng)求
4XX Client?Error(客戶端錯(cuò)誤狀態(tài)碼) 服務(wù)器無法處理請(qǐng)求
5XX Server?Error(服務(wù)器錯(cuò)誤狀態(tài)碼) 服務(wù)器處理請(qǐng)求出錯(cuò)

而這五大類中又包含了很多具體的狀態(tài)碼。具體的我們來看一下以下的這幾個(gè)。

  • 200:表示的是請(qǐng)求成功。
  • 301:Moved?Permanently,表示永久重定向,以后打開都重定向。
  • 302:Move?temporarily,臨時(shí)重定向,但是下次會(huì)不會(huì)要進(jìn)行重定向這個(gè)是不確定的。
  • 403:Forbidden,訪問被拒絕。
  • 404:Not?Found,表示要訪問的資源不存在。
  • 418:彩蛋。
  • 500:Internal?Server?Error,服務(wù)器內(nèi)部錯(cuò)誤。
  • 504:Gatway?Timeout,表示服務(wù)器訪問超時(shí)了。瀏覽器給服務(wù)器請(qǐng)求,服務(wù)器要返回響應(yīng),結(jié)果服務(wù)器遲遲沒有響應(yīng)。

3.2HTTP請(qǐng)求的構(gòu)造

3.2.1直接構(gòu)造

我們可以直接在瀏覽器的地址欄中國輸入一個(gè)url來構(gòu)造出一個(gè)GET請(qǐng)求。

3.2.2html中的特殊標(biāo)簽

在html中一些特殊標(biāo)簽也會(huì)觸發(fā)GET請(qǐng)求。比如:link、script、img、a。

3.2.3通過form表單構(gòu)造http請(qǐng)求

form表單構(gòu)造出來的GET請(qǐng)求,這里我們借助抓包工具來給大家展示,如下圖所示:

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

form表單構(gòu)造出來的POST請(qǐng)求,這里我們借助抓包工具來給大家展示,如下圖所示:

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

注意:form只支持get和post。

3.2.4通過ajax構(gòu)造

在js中提供了原生的ajax的api,但是這里我們使用的是jQuery中提供的ajax的api。下面我們來給大家來實(shí)現(xiàn)一下吧。

①打開jQuery的官網(wǎng)?https://releases.jquery.com/

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

②復(fù)制下面的路徑到代碼中。注意這里可以先自己進(jìn)行訪問一下,確保這個(gè)地址可以進(jìn)行訪問。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)?如果上述的地址打開的頁面是下面的這種情況就說明可以正確訪問到。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

引入到代碼中。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

③明確$符號(hào)的含義。

$:在jQuery中是一個(gè)特殊的全局變量。jQuery中的各種的api都是$的方法。你也可以直接使用jQuery和$是一樣的。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

上述的body是響應(yīng)的正文,function是一個(gè)回調(diào)函數(shù),會(huì)在服務(wù)器中返回一個(gè)正確的響應(yīng)的時(shí)候,

會(huì)被瀏覽器自動(dòng)執(zhí)行,這個(gè)執(zhí)行過程就是“異步”,在我們頁面的js中把請(qǐng)求發(fā)送出去之后就不用管了,就會(huì)繼續(xù)執(zhí)行后續(xù)的代碼,直到響應(yīng)回來之后傳給代碼。

相比于form來說ajax的功能比form更加豐富,更加靈活。

下面我們來運(yùn)行一下代碼。

代碼展示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ajax示例</title>
    <script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
</head>
<body>
    <script>
        $.ajax({
            url:"https://www.soguo.com",
            type:"get",//這里可以寫GET,POST...大寫或者是小寫都可以
            data:"這個(gè)是body",
            contentType:"text/plain",
            success:function(body){
                //這里寫處理響應(yīng)的代碼
                console.log(body);
            }
        });
    </script>
</body>
</html>


結(jié)果展示:
HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

我們可以看到在這個(gè)運(yùn)行結(jié)果中前端的控制臺(tái)中出現(xiàn)了紅色的子,注意這并不是bug,而是Ajax中的一個(gè)典型的跨域問題,現(xiàn)在運(yùn)行的Ajax代碼的頁面域名是abc.com但是在Ajax的請(qǐng)求中訪問的域名是def.com,這兩域名不一致的話哪怕服務(wù)器給你響應(yīng)了數(shù)據(jù),瀏覽器還是不能處理,還是要報(bào)錯(cuò)。在后面只要咱們自己寫了服務(wù)器,自己的頁面來請(qǐng)求自己的服務(wù)器,自然這里就不會(huì)存在這個(gè)跨域問題了。

3.2.5通過postman構(gòu)造

上述的這些都是需要進(jìn)行代碼來進(jìn)行構(gòu)造的,是否有辦法可以不寫代碼來構(gòu)造請(qǐng)求呢?有一些現(xiàn)成的工具,可以直接構(gòu)造出HTTP請(qǐng)求,例如postman。網(wǎng)址?https://www.postman.com/

①進(jìn)入到官網(wǎng)之后,我們切換到workspace。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

②?進(jìn)行注冊(cè)使用,并打開界面。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

③創(chuàng)建一個(gè)標(biāo)簽頁,點(diǎn)擊+號(hào)即可創(chuàng)建。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

④構(gòu)造一個(gè)請(qǐng)求。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

?在側(cè)邊欄中也可以構(gòu)造其他請(qǐng)求。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

這樣就可以構(gòu)建好請(qǐng)求了。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

4.HTTPS

4.1HTTPS是什么

HTTPS(Hyper?Text?Transfer?Protocol?Secure,安全的超文本傳輸協(xié)議)是一種基于SSL/TSL協(xié)議的HTTPS協(xié)議,他是HTTP協(xié)議的安全版本。HTTPS協(xié)議通過加密通信內(nèi)容和身份驗(yàn)證來保證數(shù)據(jù)傳輸?shù)陌踩屯暾?,從而可以有效的防止?shù)據(jù)在傳輸?shù)倪^程中被竊取或篡改。

你可以理解為HTTPS=HTTP +?加密 +?認(rèn)證 +?完整性保護(hù)。

那么什么是加密,什么又是解密呢?

  • 加密就是把明文進(jìn)行一系列的變換生成密文。
  • 解密就是把密文再進(jìn)行一系列的變換,還原成明文。
  • 加密就是針對(duì)HTTP的各種header和body。

在加密中主要是有兩種模式,一種是使用堆堆對(duì)稱密鑰,另一種是使用非對(duì)稱密鑰進(jìn)行加密。下面我們來分別看下兩種加密模式。

4.2HTTPS的工作過程

4.2.1使用對(duì)稱密鑰

原理:對(duì)稱加密其實(shí)就是通過同一個(gè)“密鑰”,把明文加密成密文,并且也能把密文解密成明文。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

那么這個(gè)密鑰是怎么保證客戶端和服務(wù)端兩者之間是一致的呢?

在客戶端傳輸數(shù)據(jù)的時(shí)候是需要加密的,此時(shí)客戶端就會(huì)自己生成一個(gè)密鑰,那么在通過網(wǎng)絡(luò)然后傳輸給服務(wù)端。既如此那么也就說明黑客也是可以拿到這里的key的。所以這里就會(huì)存在一些安全問題,如下圖所示:
HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

4.2.2引入非對(duì)稱加密

那么針對(duì)上述的不安全情況下,我們就引入了另一種機(jī)制,非對(duì)稱加密的機(jī)制??蛻舳讼M炎约旱膋ey安全的傳給服務(wù)器不被黑客拿到,那么此時(shí)我們就可以使用非對(duì)稱密鑰來進(jìn)行加密操作。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

由于這里黑客拿不到pri私鑰,無法對(duì)密文進(jìn)行解密,所以黑客就無法對(duì)密文的數(shù)據(jù)進(jìn)行解析和篡改了。這樣使用非對(duì)稱密鑰就達(dá)到了一個(gè)安全的保證機(jī)制。

4.2.3引入證書

當(dāng)然安全是相對(duì)的,黑客也不是吃素的,黑客會(huì)通過偷襲的方式來進(jìn)行篡改數(shù)據(jù)。如下所示。

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

以上就會(huì)將非對(duì)稱密鑰變得不安全了。那么它攻擊的原理就是要讓客戶端能夠信任公鑰。那么該怎么讓客戶端相信這里的公鑰呢?這里我們就需要引入一個(gè)證書的概念。我們繼續(xù)往下來看。

4.2.4完整流程

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

這里向大家解釋兩個(gè)概念:

證書:它像是一個(gè)結(jié)構(gòu)化的字符串,里面包含了以下信息(證書的發(fā)放機(jī)構(gòu)、證書有效期、公鑰、證書所有者、簽名....)

校驗(yàn):當(dāng)客戶端獲取到這個(gè)證書之后就會(huì)對(duì)該證書進(jìn)行一個(gè)校驗(yàn),辨別一下真?zhèn)?。具體操作如下所示。

  1. 得到初始的簽名:客戶端使用系統(tǒng)中內(nèi)置的權(quán)威機(jī)構(gòu)的公鑰pub2,針對(duì)上述證書中的加密簽名進(jìn)行解密,得到一個(gè)初始簽名(這個(gè)簽名是權(quán)威機(jī)構(gòu)計(jì)算出來的,假設(shè)為sum1)。
  2. 計(jì)算現(xiàn)在的簽名:客戶端使用同樣的簽名計(jì)算算法,基于證書中的屬性重新計(jì)算,得到sum2.
  3. 比較兩個(gè)簽名是否相同:如果相同就說明證書中的數(shù)據(jù)都是未被修改過的,如果簽名不同就說明證書中的數(shù)據(jù)是被修改過的,客戶端就會(huì)有瀏覽器彈窗提醒。

4.2.5總結(jié)

HTTPS工作過程涉及到的密鑰有三組。

  • 第一組(非對(duì)稱加密):用于校驗(yàn)證書是否被篡改,服務(wù)器持有私鑰(私鑰在注冊(cè)證書時(shí)或得),客戶端持有公鑰(操作系統(tǒng)包含了可信任的CA認(rèn)證機(jī)構(gòu)有哪些,同時(shí)持有對(duì)應(yīng)的公鑰),服務(wù)器使用這個(gè)私鑰對(duì)證書的簽名進(jìn)行加密,客戶端通過這個(gè)公鑰解密獲取到證書的簽名,從而校驗(yàn)證書是否被修改過。
  • 第二組(非對(duì)稱加密):用于協(xié)商生成對(duì)稱加密的密鑰,服務(wù)器生成這組私鑰-公鑰對(duì),然后通過證書把公鑰傳遞給客戶端,然后客戶端用這個(gè)公鑰給生成的對(duì)稱加密的密鑰加密,傳出給服務(wù)器,服務(wù)器通過私鑰解密獲取到對(duì)稱加密密鑰。
  • 第三組(對(duì)稱加密):客戶端和服務(wù)器后續(xù)傳輸?shù)臄?shù)據(jù)都通過這個(gè)對(duì)稱密鑰加密解密。

4.2.6HTTPSvsHTTP

HTTPS協(xié)議與HTTP協(xié)議的區(qū)別在于HTTPS協(xié)議再數(shù)據(jù)傳輸?shù)倪^程中使用了SSL/TLS協(xié)議進(jìn)行加密和身份驗(yàn)證,另外關(guān)于它們兩個(gè)的默認(rèn)端口號(hào)也是不同的,HTTP的默認(rèn)端口號(hào)是80,而HTTPS默認(rèn)端口號(hào)是443。

結(jié)束語:

這節(jié)中小編主要是給大家分享了有關(guān)于HTTP和HTTPS協(xié)議的一些具體內(nèi)容,希望這節(jié)對(duì)大家了解HTTP協(xié)議有一定幫助,想要學(xué)習(xí)的同學(xué)記得關(guān)注小編和小編一起學(xué)習(xí)吧!如果文章中有任何錯(cuò)誤也歡迎各位大佬及時(shí)為小編指點(diǎn)迷津(在此小編先謝過各位大佬啦!)

HTTP協(xié)議(JavaEE初階系列15),JavaEE初階,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)文章來源地址http://www.zghlxwxcb.cn/news/detail-681267.html

到了這里,關(guān)于HTTP協(xié)議(JavaEE初階系列15)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [17]JAVAEE-HTTP協(xié)議

    [17]JAVAEE-HTTP協(xié)議

    目錄 一、什么是HTTP協(xié)議 什么時(shí)候會(huì)用到HTTP協(xié)議? HTTP協(xié)議的工作流程 二、HTTP的報(bào)文格式 抓包 HTTP請(qǐng)求報(bào)文格式? 1.首行 2.header 常見鍵值對(duì): 3.空行 4.正文(body)(有的時(shí)候可以沒有) HTTP響應(yīng)報(bào)文格式 1.首行 常見狀態(tài)碼: GET和POST的區(qū)別 三、構(gòu)造HTTP請(qǐng)求的方法 1.直接通過

    2024年02月07日
    瀏覽(22)
  • JavaEE-HTTP協(xié)議(一)

    JavaEE-HTTP協(xié)議(一)

    計(jì)算機(jī)網(wǎng)絡(luò),核心概念,網(wǎng)絡(luò)協(xié)議 網(wǎng)絡(luò)協(xié)議種類非常多,其中一些耳熟能詳?shù)模琁P,TCP,UDP…其中還有一個(gè)應(yīng)用非常廣泛的協(xié)議,HTTP HTTP 處于 TCP/IP五層協(xié)議棧的應(yīng)用層~ HTTP在傳輸層是基于TCP的~( 不夠嚴(yán)謹(jǐn),HTTP/1 HTTP/2 是基于TCP,最新版本HTTP/3是基于UDP的,但是當(dāng)下互聯(lián)網(wǎng)絕大部

    2023年04月09日
    瀏覽(21)
  • JavaEE & HTTP應(yīng)用層協(xié)議

    JavaEE & HTTP應(yīng)用層協(xié)議

    HTTP應(yīng)用層協(xié)議 超文本傳輸協(xié)議(Hyper Text [Transfer Protocol](https://baike.baidu.com/item/Transfer Protocol/612755?fromModule=lemma_inlink),HTTP) 是一個(gè)簡單的請(qǐng)求-響應(yīng)協(xié)議 ,它通常運(yùn)行在TCP之上。它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。請(qǐng)求和響應(yīng)消息的頭以

    2024年02月06日
    瀏覽(24)
  • 初識(shí)網(wǎng)絡(luò)(JavaEE初階系列9)

    初識(shí)網(wǎng)絡(luò)(JavaEE初階系列9)

    目錄 前言: 1.網(wǎng)絡(luò)的發(fā)展史 1.1獨(dú)立模式 1.2網(wǎng)絡(luò)互聯(lián) 1.3局域網(wǎng)LAN 1.4廣域網(wǎng)WAN 2.網(wǎng)絡(luò)通信基礎(chǔ) 2.1IP地址 2.2端口號(hào) 3.認(rèn)識(shí)協(xié)議 3.1協(xié)議分層 3.2分層的作用 3.3TCP/IP五層(或四層)模型 3.4OSI七層模型 3.5網(wǎng)絡(luò)設(shè)備所在分層 4.封裝和分用 結(jié)束語: 網(wǎng)絡(luò)的主要發(fā)展大體可以分為這四個(gè)階

    2024年02月14日
    瀏覽(20)
  • 網(wǎng)絡(luò)原理(JavaEE初階系列11)

    網(wǎng)絡(luò)原理(JavaEE初階系列11)

    目錄 前言: 1.網(wǎng)絡(luò)原理的理解 2.應(yīng)用層 2.1自定義協(xié)議的約定 2.1.1確定要傳輸?shù)男畔?2.1.2確定數(shù)據(jù)的格式 3.傳輸層 3.1UDP 3.1.1UDP報(bào)文格式 3.2TCP 3.2.1確認(rèn)應(yīng)答 3.2.2超時(shí)重傳 3.2.3連接管理 3.2.3.1三次握手 3.2.3.2四次揮手 3.2.4滑動(dòng)窗口 3.2.5流量控制 3.2.6擁塞控制 3.2.7延時(shí)應(yīng)答 3.2.8捎帶

    2024年02月13日
    瀏覽(44)
  • 網(wǎng)絡(luò)編程(JavaEE初階系列10)

    網(wǎng)絡(luò)編程(JavaEE初階系列10)

    目錄 前言: 1.網(wǎng)絡(luò)編程的基礎(chǔ) 1.1為什么需要網(wǎng)絡(luò)編程 1.2什么是網(wǎng)絡(luò)編程 1.3網(wǎng)絡(luò)編程中的基本概念 1.3.1發(fā)送端和接收端 1.3.2請(qǐng)求和響應(yīng) 1.3.3客戶端和服務(wù)端 2.Socket套接字 2.1概念 2.2分類 3.UDP數(shù)據(jù)報(bào)套接字編程 3.1DataGramSocket?API 3.2DatagramPacket?API 3.3基于UDP的回顯服務(wù)器(echo?s

    2024年02月13日
    瀏覽(20)
  • 【JavaEE初階】網(wǎng)絡(luò)原理|認(rèn)識(shí)協(xié)議|協(xié)議分層|TCP/IP模型|封裝和分用

    【JavaEE初階】網(wǎng)絡(luò)原理|認(rèn)識(shí)協(xié)議|協(xié)議分層|TCP/IP模型|封裝和分用

    目錄 一、認(rèn)識(shí)協(xié)議 1.概念 2.作用(為什么需要協(xié)議?) 二、協(xié)議分層 1.為什么需要?絡(luò)協(xié)議的分層? 2. 協(xié)議分層是什么 3.分層帶來的好處 三、TCP/IP五層(或四層)模型 (1)物理層 (2)數(shù)據(jù)鏈路層 (3)網(wǎng)絡(luò)層 (4)傳輸層 (5)應(yīng)用層 四、封裝和分用(協(xié)議的層和層之間

    2024年04月23日
    瀏覽(20)
  • 【JavaEE初階系列】——網(wǎng)絡(luò)初識(shí)—TCP/IP五層網(wǎng)絡(luò)模型

    【JavaEE初階系列】——網(wǎng)絡(luò)初識(shí)—TCP/IP五層網(wǎng)絡(luò)模型

    目錄 ??網(wǎng)絡(luò)的發(fā)展史 ??局域網(wǎng)LAN? ??廣域網(wǎng)WAN ??網(wǎng)絡(luò)通信基礎(chǔ) ??IP地址 ??端口號(hào) ??協(xié)議類型? ??五元組 ??協(xié)議分層? ??什么是協(xié)議分層 ??協(xié)議分層的好處 ??OSI七層網(wǎng)絡(luò)模型 ??TCP/IP五層網(wǎng)絡(luò)模型 ??物理層 ??數(shù)據(jù)鏈路層 ??網(wǎng)絡(luò)層 ??傳輸層? ??應(yīng)用層 ??網(wǎng)絡(luò)

    2024年04月15日
    瀏覽(16)
  • [Java網(wǎng)絡(luò)安全系列面試題] HTTP和HTTPS協(xié)議區(qū)別和聯(lián)系都有哪些?

    [Java網(wǎng)絡(luò)安全系列面試題] HTTP和HTTPS協(xié)議區(qū)別和聯(lián)系都有哪些?

    2.1 HTTP特點(diǎn) 1.支持客戶/服務(wù)器模式。( C/S 模式) 2.簡單快速:客戶向服務(wù)器請(qǐng)求服務(wù)時(shí),只需傳送請(qǐng)求方法和路徑。請(qǐng)求方法常用的有 GET 、 HEAD 、 POST 。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于 HTTP 協(xié)議簡單,使得 HTTP 服務(wù)器的程序規(guī)模小,因而通信速度很快。

    2024年04月23日
    瀏覽(30)
  • 【JavaEE】網(wǎng)絡(luò)原理-HTTP

    【JavaEE】網(wǎng)絡(luò)原理-HTTP

    HTTP是一種 基于傳輸層TCP并位于應(yīng)用層的超文本協(xié)議 目前主要使用HTTP1.1和HTTP2.0 2.1 使用Fiddler抓包進(jìn)行分析 關(guān)于Fiddler: 是一個(gè)代理工具,就像高速路上的收費(fèi)站,不管什么車,只要它從高速路上經(jīng)過,那么就需要經(jīng)過收費(fèi)站 對(duì)應(yīng)到網(wǎng)站上,就是不管什么網(wǎng)站,只要有數(shù)據(jù)的

    2024年03月21日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包