HTTP圖解


本節內容

俗話說好的開發,底層知識必須過硬,不然再創新的技術,你也理解不深入,比如python web開發工程師,想要學習任何一個框架,底層都是http和socket,底層抓牢了,學起來會很輕松,所以樓主今天特意寫了一篇底層的博客,來源於《HTTP圖解》這本書。下載內容在本節末尾,可以自行前去下載觀看,比我個人了解得多要全面很多,不過不要忘記點贊哈!!

本文只要內容:

  • 了解web及網絡基礎
  • 簡單的http協議

了解web及網絡基礎

1、使用http協議訪問web

當我們用網頁瀏覽器(web browser)的地址欄中輸入URL時,Web頁面的呈現過程:

  • 輸入URL時,可以看到web頁面,即使不了解運作原理,也能看到頁面
  • 輸入URL后,信息會被送往某處
  • 然后從某處獲得的回復,內容就會顯示在web頁面上

web頁面不可能憑空顯示出來,根據web瀏覽器地址欄中指定的URL,web瀏覽器會從服務器端獲取文件資源等信息,從而顯示web頁面。

像這一套流程就可以稱作是客戶端(client)向服務端(server)獲取服務器資源

web使用一種名為HTTP(HyperText Transfer Protocol),超文本傳輸協議作為規范,完成從客戶端到服務端等一系列運作過程。而協議是指規則的約定。可以理解成,web是建立在HTTP協議上通信的。

2、網絡基礎TCP/IP

為了了解HTTP,必須的了解TCP/IP協議族。

通常使用的網絡實在TCP/IP協議族的基礎上運作的。而HTTP就屬於他的一個子集。

2.1、TCP/IP 協議族

計算機與網絡設備要相互通信,雙方就必須基於相同的方法。比如:如何探測到通信目標、由哪一方先發起通信、使用哪種語言等等好多規則。然而這種規則就是所謂的協議(protocol),你要用我就按照我協議的規則來。常用協議有:tcp,http,ftp,dhcp,dns,ip,pppoe,udp,snmp,icmp等等。

像這樣把與互聯網關聯的協議集合起來總稱TCP/IP,TCP/IP實在IP協議通信過程中,使用到的協議族的統稱

2.2、TCP/ip的分層管理

TCP/IP協議族重要的一點就是分層。TCP/IP協議族按層次划分分別是:應用層、傳輸層、網絡層和數據鏈路層。把塔層次化是有好處的。比如:當某個地方需求變更時,就必須吧所有的整體替換掉。而分層之后只需要把變動的層替換掉即可。下面介紹一下每個層次的作用

應用層

應用層決定了向用戶提供應用服務時通信的活動。比如:ftp,dns服務就是其中的兩類。HTTP協議也處於該層。

傳輸層

傳輸層對上層應用層,提供處於網絡連接中的兩台計算機之間的數據傳輸。在傳輸層有兩個性質不同的協議:TCP和UDP。

網絡層

網絡層用來處理網絡上流動的數據包。數據包是網絡傳輸的最小單位。該層規定了通過怎樣的路徑到達對方計算機,並把數據包發送給對方。

鏈路層

用來處理鏈接網絡的硬件部分。包括操作系統、硬件的設備驅動、網卡及光纖等物理可見部分。

2.3、TCP/IP通信傳輸流

比如說我想看百度網頁:流程如下:

  • 客戶端在應用層發出一個想看某個WEB頁面的HTTP請求的時候;
  • 接着為了傳輸方便,在傳輸層把應用層收到的數據進行分割,並在各個報文上打上標記序號及端口號后轉發給網絡層;
  • 在網絡層增加作為通信目的的MAC地址后轉發給鏈路層,這樣一來發送網絡的通信請求就准備齊全了;
  • 接收端的服務器在鏈路層接收到數據,按序往上層發送,一直到應用層;
  • 當傳輸到應用層,才能算真正接收到由客戶端發送過來的HTTP請求了。

發送端在層與層之間傳輸數據時,每經過一層時必定會打上一個該層的首部信息。接收端沒經過一層,會把消去。這種數據信心包裝叫做封裝。

TCP/IP傳輸是三次握手,四次斷開。一張圖搞定一切,哈哈

3、URI和URL

URI用字符串標示某一互聯網資源,而URL表示資源的地點。可見URL是URI的子集。

URI要使用涵蓋全部必要信息的URI、絕對URL以及相對URL。相對URL是指從瀏覽器中基本URI處理的URL,來先看下URI的格式

簡單的HTTP協議

1、通信過程

HTTP協議規定,請求從客戶端發出,最后服務器端相應該請求並返回。換個意思就是客戶端建立通信的,服務器端在沒有接收到請求之前不會發送響應。來一個示例:

下面的內容是客戶端想服務端發的求求內容

GET / HTTP/1.1
HOST: HACKR.JP

起始行的get表示請求訪問服務器的類型,成為方法。隨后的字符串指明了請求訪問的資源對象,也叫請求URL,后面是版本號,用來提示客戶端使用的HTTP協議功能

總結:請求報文是由請求方法、請求URL、協議版本、可選的氣你去頭和內容實體構成的。

接下來服務器端接收到請求,會將請求內容的處理結果以相應的形式返回。

HTTP /1.1 200 OK
Date:Tue,10 JUL 2016 10:50:20 GMT
Content-length:398
Content-Type:text/html

來用圖片詳細講解一下:

2、HTTP是不保存狀態的協議

HTTP是一種不報錯狀態,即無狀態協議。http協議自身不對請求和相應之間的通信狀態進行保存,也就是說在HTTP這個級別,協議對於發送過得請求和響應不做持久化處理。

使用HTTP協議,每當有新的請求發送時,就會有對應的新響應產生。協議本事並不保留之前的請求或響應報文的信息。這是為了處理大量事務,確保協議的課伸縮性,而特意吧HTTP協議設計成如此簡單的。但是也存在弊端,當業務處理變得棘手的情況多了,比如用戶登錄一家網站,即使他跳轉到別的頁面后,也需要保持登錄狀態,然而cookie就誕生了。有了cookie再用http協議通信,就可以管理狀態了。

3、HTTP方法

3.1、GET獲取資源

get方法是用來請求訪問已被URL識別的資源。指定的資源經服務端解析后返回響應內容。也就是說,請求的資源是文本,那就保持原樣返回;如果像cgi那樣的程序,則返回經過執行后的輸出結果

使用get方法的請求響應的例子:

3.2、POST傳輸實體主體

post方法用來傳輸實體的主體。雖然用get方法也可以傳輸實體的主體,但是一般不用get方法進行傳輸,而是用post方法。雖說post的功能與get很相似,但是post的主要目的並不是獲取相應的主體內容。

使用post方法請求的例子:

3.3、PUT傳輸文件

put方法用來傳輸文件,就像FTP協議的文件上傳一樣,要求在請求報文的主體中包含文件內容,然后保存到請求url指定的位置。由於put的方法不帶驗證機制,任何人都可以上傳文件,存在安全性問題,因此一般的web網站不適用該方法。

使用put方法請求的例子:

3.4、head獲取報文首部

head和get方法一樣,只是不返回報文主體部分,用於確認url的有效性及資源更新的日期時間等。

使用head方法請求的例子:

3.5、DELETE刪除文件

delete方法用來刪除文件,是與put相反的方法,delete方法按照請求url刪除指定的資源。其本質和put方法一樣不帶驗證機制,所以不適用delete方法。

使用delete方法請求的例子:

下面列舉一些方法:其中link和unlink已被HTTP/1.1廢棄 ,不在支持

 4、持久化

當頻繁訪問web網頁的時候,每次都要進行TCP/IP通信,tcp/ip通信三次握手四次斷開,代價是很昂貴的,增加了通信量的開銷,為解決上述TCP連接的問題,HTTP就誕生了持久連接的方法。特點是只要任意一端沒有明確提出斷開連接,則保持TCP連接狀態

持久化連接減少了TCP連接的重復建立和斷開所造成的額外開銷,減輕了服務端的負載。另外,減少開銷的那部分時間,使HTTP請求和響應能夠更早的結束,這樣web頁面的顯示速度也就相應的提高了。

5、使用cookie的狀態管理

cookie技術通過在請求和相應報文中寫入cookie信息來控制客戶端的狀態。cookie會根據從服務端發送的相應報文內的一個叫做set-cookie的首部字段信息,通知客戶端保存cookie。當下次客戶端再往服務器發送請求的時候,客戶端會自動在請求頭加入cookie值后發送出去。下面帶圖分析下過程

  • 沒有cookie狀態下的請求

  • 第二次以后(存有cookie信息狀態)的請求

 后續待更新!!!技術寫起來沒有代碼寫起來順手,不過還是得寫,堅持就是成功

注:百度雲鏈接:http://pan.baidu.com/s/1geASZyb 密碼:5zmy


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM