'Http 和 Socket 到底是哪門子親戚?'

"
來源:公眾號Java極客技術 
作者:江南一點雨

一些剛入門的小夥伴可能會用 Socket,也會用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客戶端工具,這兩個東西看著有點像可是又不太一樣,到底是哪裡不一樣呢?好像又說不出來,那麼今天我希望能夠幫助大家理解這兩個東西。

Http 與 Socket

我們先來看一張經典圖:


"
來源:公眾號Java極客技術 
作者:江南一點雨

一些剛入門的小夥伴可能會用 Socket,也會用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客戶端工具,這兩個東西看著有點像可是又不太一樣,到底是哪裡不一樣呢?好像又說不出來,那麼今天我希望能夠幫助大家理解這兩個東西。

Http 與 Socket

我們先來看一張經典圖:


Http 和 Socket 到底是哪門子親戚?


HTTP(HyperText Transfer Protocol) 即超文本傳輸協議,它是基於 TCP/IP 協議之上的應用層協議,TCP/IP 屬於傳輸層協議,主要用來解決數據如何在網絡中進行傳輸,而 HTTP 屬於應用層協議,主要用來解決數據如何包裝,在實際開發中,有的公司會在 C/S 結構的項目中使用自定義協議,一般自定義協議就是指自定義應用層協議。就像我從深圳向廣州寄一件快遞,HTTP 協議負責物品如何包裝以及到達目的地之後如何拆箱,而 TCP/IP 協議就是快遞公司,負責將東西從深圳運送到廣州,可能中途還會經過 N 箇中轉站,這些都由 TCP/IP 協議去負責。

我們在做數據傳輸的時候,甚至可以只使用 TCP/IP 協議,但是這樣會沒有應用層,沒有應用層,我們就不能有效識別出數據內容,所以我們還是需要應用層協議,根據實際需求,我們可以選擇不同的應用層協議,比如 HTTP、FTP 等。

Socket 則是對 TCP/IP 協議的封裝,它就是一個調用接口,通過調用 Socket,我們就可以使用 TCP/IP 協議,TCP/IP 協議只是一個協議棧,想要讓程序員能夠使用它,就必須提供可以供程序員使用的接口,這個接口就是 Socket ,在我們充分了解了 HTTP 協議的數據格式之後,我們也可以利用 Socket 來模擬 HTTP 請求。

網上有一個形象的描述,說 HTTP 就是一部轎車,提供了數據的封裝形式,Socket 則是發動機,提供了基本的網絡通信能力。

好了,不知道小夥伴現在有沒有搞清這兩個之間的關係呢?

搞清楚這個問題之後,我們再來順便聊一聊 Http 的報文結構。

Http 報文

請求報文

HTTP 的請求信息由四部分組成,分別是請求行、請求頭、空行和請求數據,如下:

"
來源:公眾號Java極客技術 
作者:江南一點雨

一些剛入門的小夥伴可能會用 Socket,也會用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客戶端工具,這兩個東西看著有點像可是又不太一樣,到底是哪裡不一樣呢?好像又說不出來,那麼今天我希望能夠幫助大家理解這兩個東西。

Http 與 Socket

我們先來看一張經典圖:


Http 和 Socket 到底是哪門子親戚?


HTTP(HyperText Transfer Protocol) 即超文本傳輸協議,它是基於 TCP/IP 協議之上的應用層協議,TCP/IP 屬於傳輸層協議,主要用來解決數據如何在網絡中進行傳輸,而 HTTP 屬於應用層協議,主要用來解決數據如何包裝,在實際開發中,有的公司會在 C/S 結構的項目中使用自定義協議,一般自定義協議就是指自定義應用層協議。就像我從深圳向廣州寄一件快遞,HTTP 協議負責物品如何包裝以及到達目的地之後如何拆箱,而 TCP/IP 協議就是快遞公司,負責將東西從深圳運送到廣州,可能中途還會經過 N 箇中轉站,這些都由 TCP/IP 協議去負責。

我們在做數據傳輸的時候,甚至可以只使用 TCP/IP 協議,但是這樣會沒有應用層,沒有應用層,我們就不能有效識別出數據內容,所以我們還是需要應用層協議,根據實際需求,我們可以選擇不同的應用層協議,比如 HTTP、FTP 等。

Socket 則是對 TCP/IP 協議的封裝,它就是一個調用接口,通過調用 Socket,我們就可以使用 TCP/IP 協議,TCP/IP 協議只是一個協議棧,想要讓程序員能夠使用它,就必須提供可以供程序員使用的接口,這個接口就是 Socket ,在我們充分了解了 HTTP 協議的數據格式之後,我們也可以利用 Socket 來模擬 HTTP 請求。

網上有一個形象的描述,說 HTTP 就是一部轎車,提供了數據的封裝形式,Socket 則是發動機,提供了基本的網絡通信能力。

好了,不知道小夥伴現在有沒有搞清這兩個之間的關係呢?

搞清楚這個問題之後,我們再來順便聊一聊 Http 的報文結構。

Http 報文

請求報文

HTTP 的請求信息由四部分組成,分別是請求行、請求頭、空行和請求數據,如下:

Http 和 Socket 到底是哪門子親戚?


  1. 請求行主要包含了三部分信息,請求方法、請求 URI 以及 HTTP 的版本
  2. 請求頭中主要包含了請求的各種條件
  3. 空行 CR+LF
  4. 請求數據

響應報文

HTTP 響應報文也由四部分組成,分別是狀態行、響應頭、空行以及響應正文,如下:

"
來源:公眾號Java極客技術 
作者:江南一點雨

一些剛入門的小夥伴可能會用 Socket,也會用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客戶端工具,這兩個東西看著有點像可是又不太一樣,到底是哪裡不一樣呢?好像又說不出來,那麼今天我希望能夠幫助大家理解這兩個東西。

Http 與 Socket

我們先來看一張經典圖:


Http 和 Socket 到底是哪門子親戚?


HTTP(HyperText Transfer Protocol) 即超文本傳輸協議,它是基於 TCP/IP 協議之上的應用層協議,TCP/IP 屬於傳輸層協議,主要用來解決數據如何在網絡中進行傳輸,而 HTTP 屬於應用層協議,主要用來解決數據如何包裝,在實際開發中,有的公司會在 C/S 結構的項目中使用自定義協議,一般自定義協議就是指自定義應用層協議。就像我從深圳向廣州寄一件快遞,HTTP 協議負責物品如何包裝以及到達目的地之後如何拆箱,而 TCP/IP 協議就是快遞公司,負責將東西從深圳運送到廣州,可能中途還會經過 N 箇中轉站,這些都由 TCP/IP 協議去負責。

我們在做數據傳輸的時候,甚至可以只使用 TCP/IP 協議,但是這樣會沒有應用層,沒有應用層,我們就不能有效識別出數據內容,所以我們還是需要應用層協議,根據實際需求,我們可以選擇不同的應用層協議,比如 HTTP、FTP 等。

Socket 則是對 TCP/IP 協議的封裝,它就是一個調用接口,通過調用 Socket,我們就可以使用 TCP/IP 協議,TCP/IP 協議只是一個協議棧,想要讓程序員能夠使用它,就必須提供可以供程序員使用的接口,這個接口就是 Socket ,在我們充分了解了 HTTP 協議的數據格式之後,我們也可以利用 Socket 來模擬 HTTP 請求。

網上有一個形象的描述,說 HTTP 就是一部轎車,提供了數據的封裝形式,Socket 則是發動機,提供了基本的網絡通信能力。

好了,不知道小夥伴現在有沒有搞清這兩個之間的關係呢?

搞清楚這個問題之後,我們再來順便聊一聊 Http 的報文結構。

Http 報文

請求報文

HTTP 的請求信息由四部分組成,分別是請求行、請求頭、空行和請求數據,如下:

Http 和 Socket 到底是哪門子親戚?


  1. 請求行主要包含了三部分信息,請求方法、請求 URI 以及 HTTP 的版本
  2. 請求頭中主要包含了請求的各種條件
  3. 空行 CR+LF
  4. 請求數據

響應報文

HTTP 響應報文也由四部分組成,分別是狀態行、響應頭、空行以及響應正文,如下:

Http 和 Socket 到底是哪門子親戚?


  1. 狀態行包含三部分內容,分別是 HTTP 版本、狀態碼和原因短語
  2. 響應頭信息
  3. 空行
  4. 響應數據

HTTP 請求方法

請求方法除了常見的 GET、POST 之外,在移動互聯網時代,PUT、DELETE 等方法也得以大展拳腳,HTTP 中的主要方法如下:

"
來源:公眾號Java極客技術 
作者:江南一點雨

一些剛入門的小夥伴可能會用 Socket,也會用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客戶端工具,這兩個東西看著有點像可是又不太一樣,到底是哪裡不一樣呢?好像又說不出來,那麼今天我希望能夠幫助大家理解這兩個東西。

Http 與 Socket

我們先來看一張經典圖:


Http 和 Socket 到底是哪門子親戚?


HTTP(HyperText Transfer Protocol) 即超文本傳輸協議,它是基於 TCP/IP 協議之上的應用層協議,TCP/IP 屬於傳輸層協議,主要用來解決數據如何在網絡中進行傳輸,而 HTTP 屬於應用層協議,主要用來解決數據如何包裝,在實際開發中,有的公司會在 C/S 結構的項目中使用自定義協議,一般自定義協議就是指自定義應用層協議。就像我從深圳向廣州寄一件快遞,HTTP 協議負責物品如何包裝以及到達目的地之後如何拆箱,而 TCP/IP 協議就是快遞公司,負責將東西從深圳運送到廣州,可能中途還會經過 N 箇中轉站,這些都由 TCP/IP 協議去負責。

我們在做數據傳輸的時候,甚至可以只使用 TCP/IP 協議,但是這樣會沒有應用層,沒有應用層,我們就不能有效識別出數據內容,所以我們還是需要應用層協議,根據實際需求,我們可以選擇不同的應用層協議,比如 HTTP、FTP 等。

Socket 則是對 TCP/IP 協議的封裝,它就是一個調用接口,通過調用 Socket,我們就可以使用 TCP/IP 協議,TCP/IP 協議只是一個協議棧,想要讓程序員能夠使用它,就必須提供可以供程序員使用的接口,這個接口就是 Socket ,在我們充分了解了 HTTP 協議的數據格式之後,我們也可以利用 Socket 來模擬 HTTP 請求。

網上有一個形象的描述,說 HTTP 就是一部轎車,提供了數據的封裝形式,Socket 則是發動機,提供了基本的網絡通信能力。

好了,不知道小夥伴現在有沒有搞清這兩個之間的關係呢?

搞清楚這個問題之後,我們再來順便聊一聊 Http 的報文結構。

Http 報文

請求報文

HTTP 的請求信息由四部分組成,分別是請求行、請求頭、空行和請求數據,如下:

Http 和 Socket 到底是哪門子親戚?


  1. 請求行主要包含了三部分信息,請求方法、請求 URI 以及 HTTP 的版本
  2. 請求頭中主要包含了請求的各種條件
  3. 空行 CR+LF
  4. 請求數據

響應報文

HTTP 響應報文也由四部分組成,分別是狀態行、響應頭、空行以及響應正文,如下:

Http 和 Socket 到底是哪門子親戚?


  1. 狀態行包含三部分內容,分別是 HTTP 版本、狀態碼和原因短語
  2. 響應頭信息
  3. 空行
  4. 響應數據

HTTP 請求方法

請求方法除了常見的 GET、POST 之外,在移動互聯網時代,PUT、DELETE 等方法也得以大展拳腳,HTTP 中的主要方法如下:

Http 和 Socket 到底是哪門子親戚?


---以上表格來自《網絡是怎樣連接的》一書

HTTP 頭信息

無論是請求報文還是響應報文,都涉及到 HTTP 頭,HTTP 頭信息一般來說可以分為四大類,分別是通用頭、請求頭、響應頭和實體頭,如下:

"
來源:公眾號Java極客技術 
作者:江南一點雨

一些剛入門的小夥伴可能會用 Socket,也會用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客戶端工具,這兩個東西看著有點像可是又不太一樣,到底是哪裡不一樣呢?好像又說不出來,那麼今天我希望能夠幫助大家理解這兩個東西。

Http 與 Socket

我們先來看一張經典圖:


Http 和 Socket 到底是哪門子親戚?


HTTP(HyperText Transfer Protocol) 即超文本傳輸協議,它是基於 TCP/IP 協議之上的應用層協議,TCP/IP 屬於傳輸層協議,主要用來解決數據如何在網絡中進行傳輸,而 HTTP 屬於應用層協議,主要用來解決數據如何包裝,在實際開發中,有的公司會在 C/S 結構的項目中使用自定義協議,一般自定義協議就是指自定義應用層協議。就像我從深圳向廣州寄一件快遞,HTTP 協議負責物品如何包裝以及到達目的地之後如何拆箱,而 TCP/IP 協議就是快遞公司,負責將東西從深圳運送到廣州,可能中途還會經過 N 箇中轉站,這些都由 TCP/IP 協議去負責。

我們在做數據傳輸的時候,甚至可以只使用 TCP/IP 協議,但是這樣會沒有應用層,沒有應用層,我們就不能有效識別出數據內容,所以我們還是需要應用層協議,根據實際需求,我們可以選擇不同的應用層協議,比如 HTTP、FTP 等。

Socket 則是對 TCP/IP 協議的封裝,它就是一個調用接口,通過調用 Socket,我們就可以使用 TCP/IP 協議,TCP/IP 協議只是一個協議棧,想要讓程序員能夠使用它,就必須提供可以供程序員使用的接口,這個接口就是 Socket ,在我們充分了解了 HTTP 協議的數據格式之後,我們也可以利用 Socket 來模擬 HTTP 請求。

網上有一個形象的描述,說 HTTP 就是一部轎車,提供了數據的封裝形式,Socket 則是發動機,提供了基本的網絡通信能力。

好了,不知道小夥伴現在有沒有搞清這兩個之間的關係呢?

搞清楚這個問題之後,我們再來順便聊一聊 Http 的報文結構。

Http 報文

請求報文

HTTP 的請求信息由四部分組成,分別是請求行、請求頭、空行和請求數據,如下:

Http 和 Socket 到底是哪門子親戚?


  1. 請求行主要包含了三部分信息,請求方法、請求 URI 以及 HTTP 的版本
  2. 請求頭中主要包含了請求的各種條件
  3. 空行 CR+LF
  4. 請求數據

響應報文

HTTP 響應報文也由四部分組成,分別是狀態行、響應頭、空行以及響應正文,如下:

Http 和 Socket 到底是哪門子親戚?


  1. 狀態行包含三部分內容,分別是 HTTP 版本、狀態碼和原因短語
  2. 響應頭信息
  3. 空行
  4. 響應數據

HTTP 請求方法

請求方法除了常見的 GET、POST 之外,在移動互聯網時代,PUT、DELETE 等方法也得以大展拳腳,HTTP 中的主要方法如下:

Http 和 Socket 到底是哪門子親戚?


---以上表格來自《網絡是怎樣連接的》一書

HTTP 頭信息

無論是請求報文還是響應報文,都涉及到 HTTP 頭,HTTP 頭信息一般來說可以分為四大類,分別是通用頭、請求頭、響應頭和實體頭,如下:

Http 和 Socket 到底是哪門子親戚?


---以上表格來自《網絡是怎樣連接的》一書

OK,搞清楚了HTTP的數據格式,接下來我們就可以用Socket模擬一個HTTP請求了。敬請關注下篇文章。

作者簡介:

江南一點雨,《Spring Boot + Vue 全棧開發實戰》作者,一個認真的程序員~
"

相關推薦

推薦中...