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

?

二.HTTP的作用
2.1理解 HTTP 協議的工作過程
客戶端(手機,PC),和服務器之間的數據傳輸,也很可能是 HTTP。

?注意:

2.2理解應用層協議
這就好比,在淘寶上買了一部手機,賣家[ 客戶端 ]把手機通過順豐[ 傳送+路徑選擇 ] 送到買家 [ 服務器 ] 手里就完了嗎?當然不是,買家還要使用這款產品,還要在使用之后,給賣家打分評論。
再回到我們剛剛說的買手機的例子,順豐相當于 TCP/IP 的功能,那么買回來的手機都附帶了說 明書【產品介紹,使用介紹,注意事項等】,而該說明書指導用戶該如何使用手機,此時的說明書可以理解為用戶層協議。
三.HTTP報文格式
3.1抓包工具的使用
要查看報文格式,要先下載一個抓包工具,抓包工具本質上是一個"代理程序”,能夠獲取到網絡上傳輸的數據,并顯示出來,從而給程序員提供一些參考。這里的抓包工具使用Fiddler,這是專注于HTTP的抓包。
下載地址:
Web Debugging Proxy and Troubleshooting Tools|Fiddler (telerik.com)
?如果是學生使用的話,使用經典版即可,是免費的。
除了上述操作之外,另外,還需要關閉電腦上本身的代理程序.
有的小伙伴為了翻墻,電腦上本身就有代理(單獨的程序/瀏覽器插件),確保你其他的代理都是關閉狀態,因為Fiddler 也是一個代理程序代理之間可能會沖突。
代理就可以簡單理解為一個跑腿小弟. 你想買罐冰闊落, 又不想自己下樓去超市, 那么就可以把錢給 你的跑腿小弟, 跑腿小弟來到超市把錢給超市老板, 再把冰闊落拿回來交到你手上. 這個過程中, 這 個跑腿小弟對于 "你" 和 "超市老板" 之間的交易細節, 是非常清楚的.
?
補充:
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,有的就沒有。
總結:
3.2HTTP響應
??HTTP響應的基本格式包含四個部分。
1.首行
2.響應頭(鍵值對)
?
3.空行?
4.響應正文(body)?載荷
總結:
?
?
四.URL?
概念:平時我們俗稱的 "網址" 其實就是說的 URL (Uniform Resource Locator 統一資源定位符),描述一個網絡上的資源位置。
順便可以認識一下它的小弟,URI(唯一資源標識符)
URL格式:?
片段標識符:
用來標識當前頁面的某個部分
通過不同的片段標識可以完成頁面內的跳轉.?
舉一個簡單的例子:
就像是我們生活中用來找到特定地方或事物的地址或導航指令。想象一下,你想要去參觀一個遠在他鄉的朋友的新家,URL就是這個過程中不可或缺的“指南”。
-
協議類型(Protocol):就像是你選擇的交通方式。在這個例子中,沒有直接對應的“協議”,但我們可以想象為“步行”、“駕車”或“乘坐公共交通”。URL中的協議部分(如
http://
或https://
)告訴瀏覽器或系統如何與資源通信,就像是你決定是開車去還是坐公交去。 -
域名(Domain Name):類似于地址中的“北京市海淀區中關村大街XX號XX小區”。這是URL中最容易識別和記憶的部分,它指向了一個特定的網站或資源的位置。在我們的例子中,小區名就像是網站的域名,比如
www.example.com
。 -
路徑(Path):指的是從域名指向的具體資源的位置,就像“1號樓2單元301室”。在URL中,路徑部分詳細說明了要訪問的資源在服務器上的位置。例如,在URL?
https://www.example.com/news/article123.html
?中,/news/article123.html
?就是路徑,它告訴服務器你想要查看的是“news”目錄下的“article123.html”文件。 -
查詢字符串(Query String):有時你可能需要在到達具體地址時提供一些額外的信息,比如你朋友的門牌號或者房間號(雖然這個例子中沒有直接對應)。在URL中,查詢字符串通過
?
后跟一系列鍵值對(如?name=John&age=30
)來傳遞這些額外信息。它告訴服務器你想要查看的頁面需要特別關注或處理哪些數據。 -
片段標識符(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)。每個鍵值對由一個等號(=
)連接鍵和值。
假設有一個搜索引擎的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 碼一致~~
靠譜的方法就是對上述符號進行“轉義“,
