【Java EE初階二十】http的簡單理解(一)

1. 初識http

?????????HTTP 最新的版本應該是 HTTP/3.0,目前大規模使用的版本 HTTP/1.1;

? ? ? ? 下面來簡單說明一下使用 HTTP 協議的場景:
1、瀏覽器打開網站 (基本上)
2、手機 APP 訪問對應的服務器 (大概率)

????????前面的 TCP與UDP 和http不同,HTTP 的報文格式,主要分兩個部分來看待:請求與響應,因為HTTP 協議,是一種"一問一答"結構模型的協議,同時請求和響應的協議格式,是有所差異的

1.1 抓包工具?

1.1.1 下載和安裝fiddler

? ? ? ? 我們如果要查看到 HTTP 請求和響應的格式就需要使用抓包工具,所謂的抓包就是把網卡上經過的數據獲取到,并顯示出來;

? ? ? ? 下面主要學習一下fiddler的下載和使用:

1.1.2? fiddler的介紹

?????????fiddler 打開之后,是一個左右結構的程序,左側有一個列表,列出了抓到的包有哪些,右側則是包的詳情:

點擊某個包后如下圖所示:

????????右側上方,是請求詳情

????????右側下方,是響應詳情:

????????新安裝的 fiddler 需要手動開啟 HTTPS 功能,并且安裝證書(否則只能抓 http),主要是因為當前互聯網環境上,HTTPS 為主,純 HTTP 非常少見了,操作如下:

????????Fiddler 本質上是一個"代理”,可能會和其他的代理軟件沖突;?

1.1.3?fiddler 實際使用

? ? ? ?1、 ctrl +a全選所有的請求.,delete 刪除,對于左側fiddler抓到的包,根據不同的顏色來進行簡單的區分:

? ? ? ? 當我們打開一個網頁的時候,往往不只是和服務器進行一次操作,大概率是多次操作

? ? ? ?1、關于請求

????????點擊左側抓到的包,之后進行下面操作:

? ? ? ? 點擊如下操作:

? ? ? ? 得到詳細的請求信息:

? ? ? ? 這里注意HTTP 協議是文本格式的協議(協議里的內容都是字符串);TCP,UDP,IP... 都是二進制格式的協議

? ? ? ? 2、關于響應

????????HTTP 響應也是文本的.直接査看,往往能看到二進制的數據(壓縮后的);至于HTTP 響應經常會被壓縮,且壓縮之后,體積變小,?傳輸的時候,節省網絡帶寬(臺服務器,最貴的硬件資源, 就是網絡帶寬,但是,壓縮和解壓縮,是需要消耗額外的 cpu 和 時間的)

? ? ? ? 下面進行解壓縮操作:

? ? ? ? 查看響應信息:

????????解壓縮之后,可以看到,響應的數據其實是 html;瀏覽器上顯示的網頁,就是 html,,往往都是瀏覽器先請求對應的服務器,從服務器這邊拿到的頁面數據 (html)

1.2 關于請求和響應

? ? ? ? 請求的格式如下:

1、首行

????????HTTP 請求的第一行,有三個部分信息,三個部分使用空格分割

1) 、GET,?HTTP 請求的"方法”(method)
2)、URL 唯一資源定位符,描述了一個資源在網絡上的位置。
3) 、版本號:HTTP/1.1

2、請求頭 (header)
????????是一個鍵值對結構的數據.(有很多鍵值對),每個鍵值對, 都是獨占一行的。鍵和值之間,使用 :空格來區分,這里的鍵值對都是屬于"標準規定”的。

3、空行
????????請求頭的結束標記

4、正文 (body)
????????有的 HTTP 請求有,有的沒有。

? ? ? ? ?響應的格式如下:

1、首行

1)、版本號 HTTP/1.1
2)、狀態碼(200) 描述了請求的結果.
3)、狀態碼描述(OK)

2、響應頭 (header)
????????也是鍵值對結構(有多個鍵值對),每個鍵值對獨占一行,鍵和值之間使用 :空格 來區分.
鍵值對也是"標準規定” 的;

3、空行
????????響應頭的結束標記

4、正文 (body)
????????正文里的內容可能比較長,也可能是多種格式包括HTML, CSS,JS,JSON,XML, 圖片, 字體,視頻,音頻..

1.3 關于URL

?????????URL是計算機中的非常重要的概念,不僅僅是在 HTTP 中涉及到,我們之前學習jdbc的時候就接觸到的,如下所示:

? ? ? ? 同時下面就是對url的詳細講解:

????????#ch1 片段標識符:
????????有的網頁內容比較長,就可以分成多個"片段”,通過片段標識符,就可以完成頁面內部的跳轉;

????????對于 query string 來說,如果 value 部分要包含一些特殊符號的話,往往需要進行 urlencode 操作。主要是因為+?:/. 這些符號在 url 中都已經有特殊用途了,如果在 value 中,也包含特殊符號,可能就會使瀏覽器/http服務器,對于 url 的解析就出現 bug ,urlencode 本質上是一種"轉義字符",+的 ascii 就是 2B, 在前面加上 % 表示這是轉義的結果,即效果如下所示:

2. 深入學習http

2.1 連接請求的方法

????????GET 請求,通常會把要傳給服務器的數據,加到 url的 query string 中;POST 請求,通常把要傳給服務器的數據,加到 body 中.

? ?? ? 1、 關于找到html網頁的分析:

????????藍色字體,是獲取到網頁 (得到 html 的響應),如下所示:

? ? ? ? 首先剛才最開始沒有抓到這里的返回頁面的請求是因為命中了瀏覽器緩存;

? ? ? ? 其次瀏覽器顯示的網頁,其實是從服務器這邊下載的 htnml,htm| 內容可能比較多,體積可能比較大,通過網絡加載,消耗的時間就可能會比較多,瀏覽器一般都會自己帶有緩存,就會把之前加載過的頁面,保存在本地硬盤上,再次訪問就直接讀取本地硬盤的數據即可;

? ? ? ? 2、對于在網頁上上傳圖片進行抓包;

????????上傳頭像的 body 比較長,body 就是圖片本體,圖片本身是二進制數據,此處把圖片放到 http 請求中,往往要進行base64 轉碼,

? ? ? ? 所謂的base64 轉碼,就是針對二進制數據重新編碼(轉義),確保編碼之后的數據就是純文本的數據

2.2 學習http請求的方法

? ? ? ? http的請求方法如下所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? 在當前的使用環境中,部分請求方法已經不經常使用了,大部分使用的請求方法只有三個,get,post和put,同時任何使用 POST 的場景,換成 PUT 完全可以;

? ? ? ? q:談一下 GET 和 POST 的區別:

? ? ? ? a:首先,?GET 和 POST 沒有本質區別,(即雙方可以替換對方的)

? ? ? ? ??????其次,雖然沒有本質區別,但是在使用習慣上,還是存在一些差異的:

1、GET 請求通常會把要傳給服務器的數據,加到query string 中;POST 請求則是經常放在?body 中.(使用習慣上最大的差異)(上述情況并非絕對,GET 也可以使用 body, POST 也可以使用 query string.使用的前提是客戶端/服務器都得按照一樣的方式來處理代碼

2、語義上的差異.(雖然語義上 HTTP 的使用是比較混亂的,但是相比之下, GET 和 POST 還是比較明確的),GET 大多數還是用來獲取數據,POST 大多數還是用來提交數據 (登錄 + 上傳)

????????GET 和 POST 之間的差別,有些說法,需要大家來注意:

1、?GET 請求能傳遞的數據量有上限, POST 傳遞的數據量沒有上限.

? ? ? ? 這是錯誤的,這個說法是一個"歷史遺留"問題,早期版本的瀏覽器(硬件資源非常匱乏),針對 GET 請求的 URL 的長度做出了限制,實際上,RFC 標準文檔中并沒有明確規定 URL 能有多長。目前的瀏覽器和服務器的實現過程中,URL 可以非常長的,(甚至說可以使用 URL 傳遞一些圖片這樣的數據);

2、GET 請求傳遞數據不安全.POST 請求傳遞數據更安全.
? ? ? 依據是:如果使用 GET 請求來實現登錄,點擊登錄的時候,就會把用戶名和密碼放到 url?中,進一步的顯示到瀏覽器的地址欄,會被人看到;?相比之下,POST 則是在 body 中,不會在界面上顯示出來,所以就更安全.

????????這是錯誤的說法,我們通常所說的“安全”指的是我們傳遞的數據,不容易被黑客獲取或者被黑客獲取到之后,不容易被破解,所謂密碼的安全性安全性,和 post 無關.關鍵在于是否加密,能否被人獲取之后破譯出來;

3、GET 只能給服務器傳輸文本數據,POST 可以給服務器傳輸文本和二進制數據

? ? ? ? 這是錯誤的;
1)、GET 也不是不能使用 body (body 中是可以直接放二進制的)
2) 、GET 也可以把二進制的數據進行 base64 轉碼,放到 url 的 query string 中

4、GET 請求是冪等的.POST 請求不是冪等的.[不夠準確, 但是也不是完全錯]

? ? ? ? 所謂冪等 ,就是輸入相同的內容,輸出是穩定的,

????????GET 和 POST 具體是否是冪等,取決于代碼的實現,GET 是否冪等,也不絕對.只不過 RFC 標準文檔,建議 GET 請求實現成冪等的;

5、GET 請求可以被瀏覽器緩存,POST 不可以被緩存(冪等性的延續. 如果請求是冪等, 自然就可以緩存)

6、.GET 請求可以被瀏覽器收藏夾收藏,POST 不能 (收藏的時候可能會丟失 body)

2.3?認識 Header

????????Header 里的鍵值對是很多的.下面主要是挑幾個重要的介紹一下;

Host:服務器所在的ip和端口號

????????即Host:www.bilibili.com,這個信息在url中也存在,但是在使用代理的情況下,Host的內容是可能和url中的內容是不一樣的;

content-Length:body中數據的長度
Content-Type:body 中數據的格式

????????請求里有 body,才會有這兩個屬性.通常情況下 GET 請求沒有 body; POST 請求有 body;

? ? ? ? 由于TCP 涉及到粘包問題,HTTP 在傳輸層就是基于 TCP 的。使用同一個 TCP 連接傳輸多個 HTTP 數據包,就會使多個 HTTP 數據包在 TCP 接收緩沖區中挨在一起,接收方解析的時候,就需要能夠清楚 HTTP 數據包之間的邊界;對于 GET 這種沒有 body 的請求,直接使用空行(分隔符),對于post這種有 body 的請求,就結合空行和content-Length;

? ? ? ? body 中的格式,可以選擇的方式是非常多的,如下所示:

????????后續給服務器提交給請求,不同的 Content-Type,服務器處理數據的邏輯是不同的;服務器返回數據給瀏覽器,也需要設置合適的 Content-Type,瀏覽器也會根據不同的 Content-Type 做出不同的處理;

2.4?User-Agent(簡稱 UA)

????????上古時期,網頁非常簡單,就只是一些單純的文字,瀏覽器功能也比較原始.后來,網頁內容越來越豐富了,瀏覽器的功能也開始逐漸升級.

????????這個升級過程也是很快的.(新的瀏覽器出現的很快),新的瀏覽器誕生之后,并不是立即就占據全部市場.相當一部分時間里,新瀏覽器和舊瀏覽器是并存的;網站的開發者就遇到困難了,網站開發者就需要考慮到是否要兼容舊版本瀏覽器;事實上,就可以使用 User-Agent 來進行區分的.UA 中記錄了瀏覽器的版本. 哪個版本的瀏覽器都支持哪些特性,哪些特性是容易獲取的,網站開發者就可以看看 UA 里的內容;

????????現在,瀏覽器之間的差異非常小了.此時的UA 的作用就沒那么關鍵了,所以UA主要是用來區分 PC端還是移動端。

ps:本次的學習內容就到這里了,如果大家感興趣的話就請一鍵三連哦!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697084.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697084.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697084.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React基礎-webpack+creact-react-app創建項目

學習視頻:學習視頻 2節:webpack工程化創建項目 2.1.webpack工程化工具:vite/rollup/turbopak; 實現組件的合并、壓縮、打包等; 代碼編譯、兼容、校驗等; 2.2.React工程化/組件開發 我們可以基于webpack自己去搭建…

sql-labs25-28a

一、環境 網上都有不過多闡述 二、sql-labs第25關 它說你的OR和and屬于它,那就是過濾了OR和and 注入嘗試 不用or和and進行爆破注入,很明顯是有注入點的 ?id-1 union select 1,2,3-- 查看數據庫 ok,此道題算是解了但是如果我們用了and了呢 ?id-1 and updatex…

淺談集群的分類

本文主要介紹集群部署相關的知識,介紹集群部署的基礎,集群的分類、集群的負載均衡技術,集群的可用性以及集群的容錯機制。隨后介紹Redis-Cluster以及Mysql的架構以及主從復制原理。 集群介紹 單臺服務器本身會受到帶寬、內存、處理器等多方面…

STM32-串口通信(串口的接收和發送)

文章目錄 STM32的串口通信一、STM32里的串口通信二、串口的發送和接收串口發送串口接收 三、串口在STM32中的配置四、串口接收的兩種實現方式1. 需要更改的地方2. 查詢RXNE標志位3. 使用中斷 總結 STM32的串口通信 本文在于記錄自己的學習過程中遇到的問題和總結,各…

golang,gin腳手架,完美集成與結構化,gin-restful-api模板gin-layout,開箱即用

關于gtools golang非常奈斯,gin作為web框架也非常奈斯,但我們在開發過程中,前期搭建會花費大量的時間,且還不盡人意。 為此我集成了gin-restful-api的模板gin-layout,還有腳手架一鍵生成項目。 集成相關 ginviperz…

大型語言模型的語義搜索(一):關鍵詞搜索

關鍵詞搜索(Keyword Search)是文本搜索種一種常用的技術,很多知名的應用app比如Spotify、YouTube 或 Google map等都會使用關鍵詞搜索的算法來實現用戶的搜索任務,關鍵詞搜索是構建搜索系統最常用的方法,最常用的搜索算法是Okapi BM25&#x…

Liunx使用nginx和http搭建yum-server倉庫

文章目錄 1. yum-server的搭建方式2. nginx搭建yum-server倉庫2.1. 安裝配置nginx2.2 配置yum-server的rpm2.3. 同步yum源相關包2.3.1 rsync同步源3.3.1 reposync同步源 2.4. 配置客戶端訪問yum配置2.5. 驗證測試 3. http服務搭建yum-server倉庫3.1. 安裝配置http3.2 配置yum-s…

基于微信小程序校園洗衣系統設計與實現(PHP后臺)可行性分析

博主介紹:黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

Firewalld防火墻

Firewalld概述 Firewalld firewalld防火墻是centos7系統默認防火墻的防火墻管理工具,取代了之前的iptables防火墻,也是工作在網絡層,屬于包過濾防火墻。 支持網絡區域所定義的網絡鏈接以及接口安全等級的動態防火墻管理工具至此IPv4、IPv6…

ECMAScript modules規范示例詳解

ECMAScript modules(簡稱 ES modules)是JavaScript的標準模塊系統。每個模塊都是一個獨立的JavaScript文件,可以在其中定義導出的變量、函數或類,并從其他模塊中導入這些變量、函數或類。以下是ES modules規范的一些示例和詳解&am…

Go 線程池實現案例

Go 語言并不像其他一些語言(例如 Java 或 C#)那樣直接提供一個線程池的概念。相反,Go 使用 goroutines 來實現并發,它是一種比線程更輕量級的并發執行單元。不過,仍然可以實現一個類似線程池的結構,來管理和…

studio one 6正版多少錢?怎么購買studio one 更便宜,有優惠券哦

Presonus Studio One Studio One是由美國PreSonus公司開發的數字音頻工作站,作為DAW屆的新人,功能強大且全面,雖然它不像其他DAW那樣擁有歷史和聲譽,但它是一個可愛的軟件,包含許多其它DAW所不具備的實用功能&#xff…

web基礎及http協議 (二)----------Apache相關配置與優化

一、httpd 安裝組成 http 服務基于 C/S 結構 1 .常見http 服務器程序 httpd apache,存在C10K(10K connections)問題 nginx 解決C10K問題lighttpd IIS .asp 應用程序服務器 tomcat .jsp 應用程序服務器 jetty 開源的servlet容器&#xf…

選擇 Python IDE(VSCode、Spyder、Visual Studio 2022和 PyCharm)

前言 當選擇 Python 開發工具時,你需要考慮自己的需求、偏好和項目類型。下面是對VSCode、Spyder、Visual Studio 2022和 PyCharm的對比推薦總結: 結論 1、如果你專注于“數據科學”,選擇SpyDer沒錯。 內容 Visual Studio Code (VS Code)…

react項目中的redux以及react-router-dom

掃盲知識點&#xff1a; 1 傳遞自定義事件&#xff1a; <button onClick{(e)>{change(e)}}>獲取事件對象e</button> 將事件對象e傳遞到了change的這個方法中。 2 同時傳遞自定義事件和參數&#xff1a; <button onClick{(e)>{change(‘我…

基于微信小程序失物招領系統設計與實現(PHP后臺+Mysql)可行性分析

博主介紹&#xff1a;黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者&#xff0c;CSDN博客專家&#xff0c;在線教育專家&#xff0c;CSDN鉆石講師&#xff1b;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

CleanMyMac2024蘋果電腦清理工具最新使用全面評價

作為軟件評價專家&#xff0c;我對CleanMyMac X進行了全面的評估&#xff0c;以下是我的詳細評價&#xff1a; CleanMyMac X4.14.6全新版下載如下: https://wm.makeding.com/iclk/?zoneid49983 一、功能 CleanMyMac X的功能相當全面&#xff0c;幾乎涵蓋了Mac電腦清理所需的…

nginx 具體介紹

一&#xff0c;nginx 介紹 &#xff08;一&#xff09;nginx 與apache 1&#xff0c; Apache event 模型 相對于 prefork 模式 可以同時處理更多的請求 相對于 worker 模式 解決了keepalive場景下&#xff0c;長期被占用的線程的資源浪費問題 因為有監聽線程&#…

【數據結構】鏈式隊列

鏈式隊列實現&#xff1a; 1.創建一個空隊列 2.尾插法入隊 3.頭刪法出隊 4.遍歷隊列 一、main函數 #include <stdio.h> #include "./3.linkqueue.h" int main(int…

文檔控件DevExpress Office File API v23.2新版亮點 - 支持SVG

DevExpress Office File API是一個專為C#, VB.NET 和 ASP.NET等開發人員提供的非可視化.NET庫。有了這個庫&#xff0c;不用安裝Microsoft Office&#xff0c;就可以完全自動處理Excel、Word等文檔。開發人員使用一個非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…