Http 和 Socket 之間的恩愛情仇

前言

一些剛入門的小夥伴可能會用 Socket,也會用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客戶端工具,這兩個東西看着有點像但是又不太同樣,究竟是哪裏不同呢?程序員

Http 與 Socket

咱們先來看一張圖:網絡

七層協議

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 的請求信息由四部分組成,分別是請求行、請求頭、空行和請求數據,以下:
開發

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

響應報文

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

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

HTTP 請求方法

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

請求方法

HTTP 頭信息

不管是請求報文仍是響應報文,都涉及到 HTTP 頭,HTTP 頭信息通常來講能夠分爲四大類,分別是通用頭、請求頭、響應頭和實體頭,以下:互聯網

頭信息

OK,搞清楚了HTTP的數據格式,接下來咱們就能夠用Socket模擬一個HTTP請求了

相關文章
相關標籤/搜索