個人HTTP學習之路 (一)

本文是在本身有必定的HTTP知識的基礎上寫的,因此不是零基礎寫起哦

1、認識 HTTP

1.1 HTTP概念

HTTP 超文本傳輸協議。html

WEB 就是是同http協議做爲一種規範來,完成從客戶端到服務器的一系列運做的。而協議是指規則的約定。web

WWW 的三個構建技術爲: 1. HTML 超文本標記語言做爲頁面 2. HTTP 超文本傳輸協議做爲文檔傳遞的規範 3. 指定文檔所在地的URL服務器

1.2 HTTP的發展史

  1. HTTP 0.9 1990年問世,這時候它纔剛剛出世,並無被髮布出去
  2. HTTP 1.0 它的正式公佈是在1996年5月,版本命名爲HTTP 1.0 雖說這個版本是早期版本,可是目前仍舊使用的仍是這個版本。
  3. HTTP 1.1 1997年發佈,是目前最主流的一個版本了。
  4. HTTP 2.0 做爲新的版本,它還在制定中,可是距離新版本問世,再到它能達到較高的覆蓋率,還須要一段時間的呢

瞭解HTTP以前,咱們務必須要先了解一下TCP/IP協議族.網絡

咱們一般所說的網絡就是再TCP/IP的基礎上運做的。而HTTP僅是做爲TCP/IP的一個分支出現。xss

1.3 TCP/IP

那麼TCP/IP是什麼東東呢?學習

TCP/IP是互聯網相關的各種協議的總稱。ui

TCP/IP最主要的一點就是分層管理,分爲四層: 傳輸層網絡層數據鏈路層應用層。這樣分層的好處是很是顯著的,各自互補影響,他們只須要完成本身分工的那一部分任務就能夠了,並不須要去管別的層所處理的任務。spa

TCP/IP協議族各層的做用:操作系統

應用層

應用層決定的是向用戶提供應用服務時的活動。.net

在TCP/IP中預存了一些固定的應用服務。包括FPT (文件傳輸協議)、 DNS(域名系統)。http也是在應用層。

傳輸層

它提供處於網絡連接中的兩個計算機之間的數據傳輸。
存在有兩個性質徹底不一樣的協議: TCP(傳輸控制協議) 、 UDP(用戶數據報協議)。

網絡層

它處理的時網絡上流通的數據包,數據包時網絡傳輸的最小的單位,該層規定了應該經過怎樣的一個 途徑將數據包從一個計算機傳到另外一個計算機。 若是說在與對方的計算機之間存在有諸多的計算機或者是網絡,那麼該層將會選擇一條傳輸路徑。

鏈路層

主要解決的是連接網絡的硬件部分,包括操做系統,硬件設備,NIC、以及光纖等物理可見的部分。

TCP/IP通訊傳輸流

利用TCP/IP來進行網絡通訊時,會經過分層處理來與對方進行通訊。

咱們拿HTTP來分析討論一下。

[ x ] 咱們在應用層客戶端發送一個要查看Web頁面的一個HTTP請求
[ x ] 經過傳輸層,將接受到的HTTP請求報文進行拆分,並在各個報文上打上標記序號以及端口號,將其發送給網絡層。
[ x ] 在網絡層,經過IP協議增長請求目的地的MAC地址給鏈路層。
[ x ] 到此,發往服務器的請求就準備完畢了。

[ x ] 服務端的接受時按照相反的順序進行的,首先是服務器的鏈路層接收,接着逐層往上傳,一直到達應用層,這樣就獲得了發送來的HTTP請求。

  • 在發送端,每通過一個層,就會增長一個首部信息,在接收端,每通過一個層,就會減小一個首部。這種把數據包裝起來的方法稱爲是封裝

1.4 與HTTP相關的一些協議

負責傳輸的IP協議

IP協議屬於網絡層,這裏所說的IP協議可能會讓一些人將IPIP地址混淆。IP實際上是一種協議的名稱。

IP協議的做用主要是把各類數據包傳給對方,而要保證確實的傳給對方,那麼就須要知足各種條件,其中最重要的是IP地址MAC地址

標識網絡中的一臺計算機,通常至少有三種方法,最經常使用的是域名地址、IP地址和MAC地址,分別對應應用層、網絡層、物理層。網絡管理通常就是在網絡層針對IP地址進行管理,但因爲一臺計算機的IP地址能夠由用戶自行設定,管理起來相對困難,MAC地址通常不可更改,因此把IP地址同MAC地址組合到一塊兒管理就成爲常見的管理方式。

通訊雙方通常不在同一個局域網以內,一般是要通過多臺計算機以及互聯網中的中轉設備來通訊的。在通訊中主要是經過MAC地址來實現中轉。而ARP協議是一種用於解析IP反查MAC的協議。

咱們最終因該瞭解的是不管互聯網中的哪臺計算機、哪一個網絡設備都沒法瞭解互聯網中的細節,所以在通訊過程當中是經過不斷的中轉,來到達目的地的,中轉的方向經過IP地址MAC地址的網段來尋找。

圖片描述

確保可靠性的TCP協議

TCP屬於傳輸層。提供的是可靠的字節流服務

在傳輸打斷的請求數據的時候,TCP會將其拆分紅報文段爲單位的數據包,而可靠的數據傳輸服務是指,TCP可以保證將完整的數據傳送給對方哦。

爲了準確無誤的傳送過去,TCP連接採用了三次握手的策略。

所謂三次握手(Three-way Handshake),是指創建一個 TCP 鏈接時,須要客戶端和服務器總共發送3個包。

第一次握手:(SYN=1,seq = x)

客戶端發送一個標誌即SYN=1的包,告訴客戶端要鏈接了,同時把打算鏈接的端口以及初始化序列x保存在包頭的seq(Sequence Number)發送給服務器。客戶端進入了 SYN_SEND 狀態.

第二次握手: (SYN = 1; ACK = 1; seq = y; ACKNUM = x+1;)

服務端返回承認包ACK,即ACK = 1; SYN = 1; 返回服務器本身的序列號 seq = y ; 以及確認序列號爲 ACKnum = x+1 ;服務端進入SYN_RCVD狀態。

第三次握手:(ACK = 1; ACKnum = y + 1);

客戶端再次發送確認包ACK = 1; SYN = 0; 確認序列號爲 y + 1;。以後客戶端服務端都進入了ESTABLISHED狀態。 至此TCP握手結束。

圖片描述

  • 三次握手以後還有這四次揮手,以後會細細學習。

負責域名解析的DNS服務

DNS協議一樣屬於應用層。它提供的是域名到IP地址之間的解析服務。

計算機能夠被賦予IP地址,也能夠被賦予主機名和域名。好比: www.gcsn.site

用戶一般使用的是主機名和域名來直接訪問計算機,不多會直接用IP地址來訪問,一是由於很難記憶,還不符合人們的習慣。

DNS協議提供的是經過域名查找IP地址,或者逆向從IP地址反查域名的服務。

圖片描述

各類協議與HTTP的關係

圖片描述

咱們以一個web頁面的請求爲例子來貫穿一下整個流程吧。

  • 確認需求: 請求http://hackr.jp/xss/頁面
  • 客戶端訪問DNS服務器,告訴我hackr.jp的IP地址,獲得地址後
  • HTTP協議:生成針對目標的HTTP請求報文(請給我http://hackr.jp/xss/的頁面資源)。
  • TCP協議: 將請求報文,分割成報文段,按照序號進行排列,而後將每一個報文段均可靠的傳給對方
  • IP協議: 搜索對方的地址,不斷的進行中轉傳輸
  • 服務器的TCP協議,獲取傳過來的報文段,對其進行組合排序,並重組請求報文。
  • HTTP協議對其進行分析,這時候服務器知道了,這個用戶是想訪問xss下的資源。
  • 而後將資源傳回去(過程與上訴相反)。

1.5 URL 與 URI 的區別

URL是統一資源定位符,URI是統一資源標識符。

u —— uniform 統一的格式
r —— Resource 資源,任何東西可爲資源
I —— Identifier 可標識的

URI是用一串字符串表示互聯網的資源,URL是表示資源的位置。因此URL是URI的子集。

絕對URI的格式:

http://user:pass@www.example.com:80/dir/index.html?uid=1#ch2

從左往右依次是: 協議名、用戶名、密碼、服務器地址、端口、帶層次的文件路徑、查詢字符串、片斷標識符

RFCHTTP協議的技術標準。


未完待續,第一篇告一段落了,以後會有更多篇
相關文章
相關標籤/搜索