HTTP背后的故事:理解現代網絡如何工作的關鍵(一)

一.HTTP是什么

概念
1.HTTP ( 全稱為 " 超文本傳輸協議 ") 是一種應用非常廣泛的 應用層協議。

2.HTTP 誕生與1991. 目前已經發展為最主流使用的一種應用層協議.

3.HTTP 往往是基于傳輸層的 TCP 協議實現的 . (HTTP1.0, HTTP1.1, HTTP2.0 均為 TCP, HTTP3 基于 UDP
實現 )
4.目前我們主要使用的還是 HTTP1.1 HTTP2.0。
?在TCP/IP 五層協議棧角度,HTTP屬于是在應用層的協議
我們知道,其實Java程序員使用Java的最主要的場景就是做網站,而網站=后端(HTTP服務器)+前端(瀏覽器), 我們平時打開一個網站, 就是通過 HTTP 協議來傳輸數據的,而HTTP也是基于TCP來實現的。

?

補充:如何理解超文本呢?一張圖解釋就可以了。

二.HTTP的作用

2.1理解 HTTP 協議的工作過程

概念:HTTP 協議最主要的應用場景就是網站.,瀏覽器和服務器之間進行傳輸數據。
客戶端(手機,PC),和服務器之間的數據傳輸,也很可能是 HTTP。
比如我在瀏覽器訪問CSDN的服務器,服務器再給我返回請求。

?注意

通過 https 來進行通信的. https 是在 http 基礎之上做了一個加密解密的工作。
當我們在瀏覽器中輸入一個 CSDN的 " 網址 " (URL) , 瀏覽器就給搜狗的服務器發送了一個 HTTP 請求, CSDN 的服務器返回了一個 HTTP 響應 .
這個響應結果被瀏覽器解析之后 , 就展示成我們看到的頁面內容 . ( 這個過程中瀏覽器可能會給服務器發送多個 HTTP 請求 , 服務器會對應返回多個響應 , 這些響應里就包含了頁面 HTML, CSS, JavaScript, 圖片 ,字體等信息).
HTTP協議的交互過程,非常典型的"一問一答",因為對于網站開發來說,基本是夠用了。
在特殊場景下,單獨的http是不夠的,比如如果需要服務器中主動給瀏覽器發送信息(消息推送),則需要和websocket和HTTP搭配使用,websocket在這個場景中做補充作用。類似如下

2.2理解應用層協議

我們已經學過 TCP/IP , 已經知道目前數據能從客戶端進程經過路徑選擇跨網絡傳送到服務器端進程 [ IP+Port ].
可是,僅僅把數據從 A 點傳送到 B 點就完了嗎?
這就好比,在淘寶上買了一部手機,賣家[ 客戶端 ]把手機通過順豐[ 傳送+路徑選擇 ] 送到買家 [ 服務器 ] 手里就完了嗎?
當然不是,買家還要使用這款產品,還要在使用之后,給賣家打分評論
這層協議叫做應用層協議。而應用是有不同的場景的,所以應用層協議是有不同種類的,其中經典協議之一的HTTP 就是其中的佼佼者 .
再回到我們剛剛說的買手機的例子,順豐相當于 TCP/IP 的功能,那么買回來的手機都附帶了說 明書【產品介紹,使用介紹,注意事項等】,而該說明書指導用戶該如何使用手機,此時的說明書可以理解為用戶層協議。

三.HTTP報文格式

3.1抓包工具的使用

要查看報文格式,要先下載一個抓包工具,抓包工具本質上是一個"代理程序”,能夠獲取到網絡上傳輸的數據,并顯示出來,從而給程序員提供一些參考。這里的抓包工具使用Fiddler,這是專注于HTTP的抓包。

下載地址:

Web Debugging Proxy and Troubleshooting Tools|Fiddler (telerik.com)

?如果是學生使用的話,使用經典版即可,是免費的。

除了上述操作之外,另外,還需要關閉電腦上本身的代理程序.
有的小伙伴為了翻墻,電腦上本身就有代理(單獨的程序/瀏覽器插件),確保你其他的代理都是關閉狀態,因為Fiddler 也是一個代理程序代理之間可能會沖突。

Fiddler 相當于一個 "代理".
代理就可以簡單理解為一個跑腿小弟. 你想買罐冰闊落, 又不想自己下樓去超市, 那么就可以把錢給 你的跑腿小弟, 跑腿小弟來到超市把錢給超市老板, 再把冰闊落拿回來交到你手上. 這個過程中, 這 個跑腿小弟對于 "你" 和 "超市老板" 之間的交易細節, 是非常清楚的.
瀏覽器訪問 ?csdn.com , 就會把 HTTP 請求先發給 Fiddler, Fiddler 再把請求轉發給 csdn 的服務器 . 當 csdn 服務器返回數據時 , Fiddler 拿到返回數據 , 再把數據交給瀏覽器.
因此 Fiddler 對于瀏覽器和 ?csdn 服務器之間交互的數據細節 , 都是非常清楚的 .

?

補充

1.打開一個網站,其實瀏覽器和服務器之間進行的 HTTP 交互不是只有一次,而是通常有很多次!!
第一次交互是拿到這個頁面的 html.


2.html 還會依賴其他的 css 和 js, 圖片等. html 被瀏覽器加載之后,又會發一些其他的 http 請求,獲取到 CSS,js 等

3.當執行 js 的時候js代碼里可能又要觸發很多的 http 請求,獲取到一些數據.....

?3.1HTTP請求

?HTTP請求的基本格式包含四個部分。

1.首行

2.請求頭(header)

從第二行,一直到后面都是請求頭,類似于 TCP 報頭/IP 報頭.重要的屬性信息
咱們這里是文本的方式組織的.
報頭中包含了很多的鍵值對.每個鍵值對占一行.鍵和值之間使用:空格 來分割
此處的鍵值對都有哪些,都是什么含義? 全都是 HTTP 協議規定的?

?3.空行? ?

請求頭最下面會有一個空行,這個空行就表示結束標記

?4.正文(body)

http的載荷部分,有的http請求有body,有的就沒有。

總結

首行: [方法] + [url] + [版本]
Header: 請求的屬性, 冒號分割的鍵值對;每組屬性之間使用\n分隔;遇到空行表示Header部
分結束
Body: 空行后面的內容都是Body. Body允許為空字符串. 如果Body存在, 則在Header中會有
一個Content-Length屬性來標識Body的長度;

3.2HTTP響應

??HTTP響應的基本格式包含四個部分。

1.首行

2.響應頭(鍵值對)

?

3.空行?

4.響應正文(body)?載荷

注意
首行: [版本號] + [狀態碼] + [狀態碼解釋]
Header: 請求的屬性, 冒號分割的鍵值對;每組屬性之間使用\n分隔;遇到空行表示Header部
分結束
Body: 空行后面的內容都是Body. Body允許為空字符串. 如果Body存在, 則在Header中會有
一個Content-Length屬性來標識Body的長度; 如果服務器返回了一個html頁面, 那么html頁
面內容就是在body中.

總結

?

?

四.URL?

概念:平時我們俗稱的 "網址" 其實就是說的 URL (Uniform Resource Locator 統一資源定位符),描述一個網絡上的資源位置。

互聯網上的每個文件都有一個唯一的 URL ,它包含的信息指出文件的位置以及瀏覽器應該怎么處理它 .
URL 的詳細規則由 因特網標準 RFC1738 進行了約定 . ( https://datatracker.ietf.org/doc/html/rfc1738 )

順便可以認識一下它的小弟,URI(唯一資源標識符)

URL格式:?

片段標識符:

用來標識當前頁面的某個部分
通過不同的片段標識可以完成頁面內的跳轉.?

舉一個簡單的例子

就像是我們生活中用來找到特定地方或事物的地址或導航指令。想象一下,你想要去參觀一個遠在他鄉的朋友的新家,URL就是這個過程中不可或缺的“指南”。

  1. 協議類型(Protocol):就像是你選擇的交通方式。在這個例子中,沒有直接對應的“協議”,但我們可以想象為“步行”、“駕車”或“乘坐公共交通”。URL中的協議部分(如http://https://)告訴瀏覽器或系統如何與資源通信,就像是你決定是開車去還是坐公交去。

  2. 域名(Domain Name):類似于地址中的“北京市海淀區中關村大街XX號XX小區”。這是URL中最容易識別和記憶的部分,它指向了一個特定的網站或資源的位置。在我們的例子中,小區名就像是網站的域名,比如www.example.com

  3. 路徑(Path)指的是從域名指向的具體資源的位置,就像“1號樓2單元301室”。在URL中,路徑部分詳細說明了要訪問的資源在服務器上的位置。例如,在URL?https://www.example.com/news/article123.html?中,/news/article123.html?就是路徑,它告訴服務器你想要查看的是“news”目錄下的“article123.html”文件。

  4. 查詢字符串(Query String):有時你可能需要在到達具體地址時提供一些額外的信息,比如你朋友的門牌號或者房間號(雖然這個例子中沒有直接對應)。在URL中,查詢字符串通過?后跟一系列鍵值對(如?name=John&age=30)來傳遞這些額外信息。它告訴服務器你想要查看的頁面需要特別關注或處理哪些數據。

  5. 片段標識符(Fragment Identifier):這更像是進入房間后,你告訴朋友你想直接去看書架上的某本書。在URL中,片段標識符通過#后跟一個標識符(如#section2)來指定頁面上的一個特定部分。瀏覽器會直接滾動到該標識符對應的位置,而不是加載整個新頁面。

這是一個最簡單的URL:

補充:

1.如何找到網絡上資源位置

(1) 通過 ip 地址知道服務器在哪
(2) 過 端口號 知道程序是哪個
(3) 過 路徑 知道是訪問哪個資源

2.查詢字符串,是客戶端給服務器傳遞信息的重要途徑
這里的組織方式是按照鍵值對的方式來組織的 (又是鍵值對
這里的鍵值對的內容,都是程序員自定義的?

結合上述的 IP 地址,端口號,路徑,查詢字符串,就可以描述出一個網絡資源了。

4.1關于URL encode?

在此之前先說明query string

什么是query string?

概念:query String(查詢字符串)是URL中用于傳遞額外信息給服務器的一部分。它通常位于URL的末尾,緊跟在路徑(Path)之后,由問號(?)開始,后面跟著一系列由&符號分隔的鍵值對(Key-Value Pairs)。每個鍵值對由一個等號(=)連接鍵和值。

query string 中的內容是鍵值對結構. 其中的 key 和 value 的取值和個數, 完全都是程序猿自己約
定的. 我們可以通過這樣的方式來自定制傳輸我們需要的信息給服務器.

假設有一個搜索引擎的URL,用戶想要搜索“apple”這個詞。該URL可能看起來像這樣:

?https://www.example.com/search?query=apple

在這個例子中,查詢字符串是?query=apple。它包含一個鍵(query)和一個值(apple),告訴服務器用戶想要搜索的關鍵詞是“apple”。

如果搜索請求包含多個參數,它們可以通過&符號分隔。例如,如果用戶想要同時指定搜索的關鍵詞和結果頁面的排序方式,URL可能看起來像這樣:

https://www.example.com/search?query=apple&sort=relevance

在這個例子中,查詢字符串包含了兩個鍵值對:query=apple?和?sort=relevance。服務器將解析這些參數,并根據用戶的請求返回相關的搜索結果,同時按照相關性進行排序。

query string 里都是是自定義的鍵值對。
在 URL 中,本身有些特殊符號具有特定的含義,比如:/? :?? @? .....
如果 url 的 query string 中也包含同樣的符號,咋辦?
如果直接寫進去,可能就會使服務器/瀏覽器解析失敗!!就訪問不了服務器

漢字也是要轉義的,漢字的 utf8 / gbk 等編碼值其中可能某個字節就恰好和某個符號的 ascii 碼一致~~

靠譜的方法就是對上述符號進行“轉義“,

轉義的規則如下 : 將需要轉碼的字符轉為 16 進制,然后從右到左,取 4 ( 不足 4 位直接處理 ) ,每 2 位做一位,前面加上% ,編碼成 %XY 格式
此時的c++中的"+" 被轉義成了 "%2B"。
同時urldecode 就是 urlencode 的逆過程 ;

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

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

相關文章

DelphiXE內存泄漏問題,已經發生了很多次

內存泄漏的地方一定要注意: 不斷分配的Tbytes會導致內存泄漏,發生以下錯誤: Access violation at address CA5ED400. Execution of address CA5ED400 {=====內存泄漏最大的地方、居然沒有釋放=====} //SetLength(tbuff,length(Adata)); //Move(Adata,Tbuff,length(…

2024世界人工智能大會(WAIC)學習總結

1 前言 在2024年的世界人工智能大會(WAIC)上,我們見證了從農業社會到工業社會再到數字化社會的深刻轉變。這一進程不僅體現在技術的單點爆發,更引發了整個產業鏈的全面突破,未來將是技術以指數級速度發展的嶄新時代。…

等保測評別犯難,黑龍江等保測評服務流程來啦!

引言 在當今數字化時代,網絡安全已經成為企業發展的基石。為了響應國家網絡安全等級保護(簡稱“等保”)政策,黑龍江地區的企業紛紛啟動了等保測評工作。然而,對于很多企業而言,等保測評似乎是一項既復雜又…

【從0到1進階Redis】主從復制 — 主從機宕機測試

上一篇:【從0到1進階Redis】主從復制 測試:主機斷開連接,從機依舊連接到主機的,但是沒有寫操作,這個時候,主機如果回來了,從機依舊可以直接獲取到主機寫的信息。 如果是使用命令行,來…

PyTorch深度學習實戰(46)——深度Q學習

PyTorch深度學習實戰(46)——深度Q學習 0. 前言1. 深度 Q 學習2. 網絡架構3. 實現深度 Q 學習模型進行 CartPole 游戲小結系列鏈接 0. 前言 我們已經學習了如何構建一個 Q 表,通過在多個 episode 中重復進行游戲獲取與給定狀態-動作組合相對…

Hypertable install of rhel6.0

1.rpm 安裝:(如果已存在,會提示沖突,使用--replacefiles) 1.1 編譯環境 安裝gcc gcc-c++ make cmake(在admin machine上,放置rpm包的文件里依次執行下面的語句): sudo rpm -ivh cpp-4.4.6-4.el6.x86_64.rpm --replacefiles sudo rpm -ivh libgcc-4.4.6-4.el6.x86_64.rp…

【學習筆記】無人機(UAV)在3GPP系統中的增強支持(十四)-無人機操控關鍵績效指標(KPI)框架

引言 本文是3GPP TR 22.829 V17.1.0技術報告,專注于無人機(UAV)在3GPP系統中的增強支持。文章提出了多個無人機應用場景,分析了相應的能力要求,并建議了新的服務級別要求和關鍵性能指標(KPIs)。…

第二證券:轉融通是什么意思?什么是轉融通?

轉融通,包含轉融資和轉融券,實質是借錢和借券。轉融通是指證券金融公司借入證券、籌得資金后,再轉借給證券公司,是一假貸聯絡,具體是指證券公司從符合要求的基金處理公司、保險公司、社保基金等組織出資者融券&#xf…

Python應用開發——30天學習Streamlit Python包進行APP的構建(15):優化性能并為應用程序添加狀態

Caching and state 優化性能并為應用程序添加狀態! Caching 緩存 Streamlit 為數據和全局資源提供了強大的緩存原語。即使從網絡加載數據、處理大型數據集或執行昂貴的計算,它們也能讓您的應用程序保持高性能。 本頁僅包含有關 st.cache_data API 的信息。如需深入了解緩…

技術成神之路:設計模式(六)策略模式

1.介紹 策略模式(Strategy Pattern)是一種行為型設計模式,它定義了一系列算法,封裝每一個算法,并使它們可以相互替換。策略模式使得算法的變化獨立于使用算法的客戶端。 2.主要作用 策略模式的主要作用是將算法或行為…

面試問題梳理:項目中防止配置中的密碼泄露-Jasypt

背景 想起面試的時候,面試官問我現在大家用Spring框架,數據庫、ES之類的密碼都是配置在配置文件中的,有很大的安全隱患,你有考慮過怎么解決嘛? 當時我回答是可以在項目啟動的過程中的命令行追加的方式,感覺…

Hello,World!(C++)

題目描述 編寫一個能夠輸出 Hello,World! 的程序。 提示&#xff1a; - 使用英文標點符號&#xff1b; Hello,World! 逗號后面沒有空格。 H 和 W 為大寫字母。 樣例 #1 樣例輸入 #1 無 樣例輸出 #1 Hello,World! &#xff08;1&#xff09; #include<bits/stdc.…

力扣題解( 讓字符串成為回文串的最少插入次數)

1312. 讓字符串成為回文串的最少插入次數 給你一個字符串 s &#xff0c;每一次操作你都可以在字符串的任意位置插入任意字符。 請你返回讓 s 成為回文串的 最少操作次數 。 「回文串」是正讀和反讀都相同的字符串。 思路&#xff1a; 本題要求的是最少插入次數&#xff0c;…

什么叫圖像的雙邊濾波,并附利用OpenCV和MATLB實現雙邊濾波的代碼

雙邊濾波&#xff08;Bilateral Filtering&#xff09;是一種在圖像處理中常用的非線性濾波技術&#xff0c;主要用于去噪和保邊。它在空間域和像素值域上同時進行加權&#xff0c;既考慮了像素之間的空間距離&#xff0c;也考慮了像素值之間的相似度&#xff0c;從而能夠有效地…

手機怎么看WiFi的IP地址

在如今數字化快速發展的時代&#xff0c;無線網絡已成為我們日常生活中不可或缺的一部分。無論是工作、學習還是娛樂&#xff0c;我們可能都離不開WiFi的陪伴。然而&#xff0c;在使用WiFi的過程中&#xff0c;有時我們可能需要查看其IP地址&#xff0c;以便更好地管理我們的網…

【動態規劃】背包問題 {01背包問題;完全背包問題;二維費用背包問題}

一、背包問題概述 背包問題(Knapsackproblem)是?種組合優化的NP完全問題。 問題可以描述為&#xff1a;給定一組物品&#xff0c;每種物品都有自己的重量和價格&#xff0c;在限定的總重量內&#xff0c;我們如何選擇&#xff0c;才能使得物品的總價格最?。 根據物品的個數…

鏈接追蹤系列-07.logstash安裝json_lines插件

進入docker中的logstash 容器內&#xff1a; jelexbogon ~ % docker exec -it 7ee8960c99a31e607f346b2802419b8b819cc860863bc283cb7483bc03ba1420 /bin/sh $ pwd /usr/share/logstash $ ls bin CONTRIBUTORS Gemfile jdk logstash-core modules tools x-pack …

語音識別概述

語音識別概述 一.什么是語音&#xff1f; 語音是語言的聲學表現形式&#xff0c;是人類自然的交流工具。 圖片來源&#xff1a;https://www.shenlanxueyuan.com/course/381 二.語音識別的定義 語音識別&#xff08;Automatic Speech Recognition, ASR 或 Speech to Text, ST…

基于RAG大模型的變電站智慧運維-第十屆Nvidia Sky Hackathon參賽作品

第十屆Nvidia Sky Hackathon參賽作品 1. 項目說明 變電站是用于變電的設施&#xff0c;主要的作用是將電壓轉化&#xff0c;使電能在輸電線路中能夠長距離傳輸。在電力系統中&#xff0c;變電站起到了極為重要的作用&#xff0c;它可以完成電能的負荷分配、電壓的穩定、容錯保…

電影購票小程序論文(設計)開題報告

一、課題的背景和意義 隨著互聯網技術的不斷發展&#xff0c;人們對于購票的需求也越來越高。傳統的購票方式存在著排隊時間長、購票流程繁瑣等問題&#xff0c;而網上購票則能夠有效地解決這些問題。電影購票小程序是網上購票的一種新型應用&#xff0c;它能夠讓用戶隨時隨地…