一些剛入門的小夥伴可能會用 Socket,也會用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客戶端工具,這兩個東西看着有點像但是又不太同樣,究竟是哪裏不同呢?程序員
咱們先來看一張圖:網絡
HTTP(HyperText Transfer Protocol) 即超文本傳輸協議,它是基於 TCP/IP 協議之上的應用層協議,TCP/IP 屬於傳輸層協議,主要用來解決數據如何在網絡中進行傳輸,而 HTTP 屬於應用層協議,主要用來解決數據如何包裝,在實際開發中,有的公司會在 C/S 結構的項目中使用自定義協議,通常自定義協議就是指自定義應用層協議。就像我從深圳向廣州寄一件快遞,HTTP 協議負責物品如何包裝以及到達目的地以後如何拆箱,而 TCP/IP 協議就是快遞公司,負責將東西從深圳運送到廣州,可能中途還會通過 N 箇中轉站,這些都由 TCP/IP 協議去負責。socket
咱們在作數據傳輸的時候,甚至能夠只使用 TCP/IP 協議,可是這樣會沒有應用層,沒有應用層,咱們就不能有效識別出數據內容,因此咱們仍是須要應用層協議,根據實際需求,咱們能夠選擇不一樣的應用層協議,好比 HTTP、FTP 等。工具
Socket 則是對 TCP/IP 協議的封裝,它就是一個調用接口,經過調用 Socket,咱們就可使用 TCP/IP 協議,TCP/IP 協議只是一個協議棧,想要讓程序員可以使用它,就必須提供能夠供程序員使用的接口,這個接口就是 Socket ,在咱們充分了解了 HTTP 協議的數據格式以後,咱們也能夠利用 Socket 來模擬 HTTP 請求。blog
網上有一個形象的描述,說 HTTP 就是一部轎車,提供了數據的封裝形式,Socket 則是發動機,提供了基本的網絡通訊能力。接口
HTTP 的請求信息由四部分組成,分別是請求行、請求頭、空行和請求數據,以下:
開發
HTTP 響應報文也由四部分組成,分別是狀態行、響應頭、空行以及響應正文,以下:
io
請求方法除了常見的 GET、POST 以外,在移動互聯網時代,PUT、DELETE 等方法也得以大展拳腳,HTTP 中的主要方法以下:入門
不管是請求報文仍是響應報文,都涉及到 HTTP 頭,HTTP 頭信息通常來講能夠分爲四大類,分別是通用頭、請求頭、響應頭和實體頭,以下:互聯網
OK,搞清楚了HTTP的數據格式,接下來咱們就能夠用Socket模擬一個HTTP請求了