HTTP概述

場景:想象一下你是木葉村的火影,現在你想同砂忍村的風影建交。你必須指派一名忍者來傳達建交文書,爲確保文書的完好,你指派的忍者必須非常可靠,無論遇到多麼危險的情況,都能準確完好地將文書傳達到風影手裏。這名忍者叫卡卡西,啊不,叫HTTP(數據傳輸協議)。

現在知道了吧,HTTP就是一個可靠的信使。即使你在北極,將數據傳達到南極,HTTP也會完整地將數據傳遞過去。

在Web世界中,不是影和影的建交,而是客戶端和服務器的交流。因此,HTTP就是這兩隻之間送信跑腿的。簡單的流程就是:客戶端指派一名HTTP,帶着文書(報文)去服務器那提出請求,服務器處理請求後,又指派一名HTTP帶着處理結果的文書(報文)回到客戶端。

具象化就是:你在瀏覽器中(客戶端)輸入http://www.zhihu.com/index.html。翻譯過來就是:你指派一個http,前去一個人稱www.zhihu.com的影(服務器主機)那,要一個叫作index.html卷軸。如果成功了,這個影就會將這份卷軸的詳細信息做出一個文書(報文),派一個HTTP送回到你的瀏覽器你中。

說一下資源,能產生內容的就是資源。資源可以是靜態的文本,圖片,視頻,反正就是有用的東西。像上面的http://www.zhihu.com/index.html就是一個資源。
Web內容都是存儲在Web服務器裏的,而資源產生內容。因此Web服務器其實就是裝各種資源的大金主啊。

對於每一個資源,當然應該要有名字來稱呼它,否則怎麼能精確地找出你想要的是哪個資源呢?所以,我們就有了URI(統一資源標識符),標識就是名字的意思。URI又有2這種格式,一種是根據位置定位來稱呼的,比如小明家的地址是幸福街189-1號,你就可以用幸福街189-1號來定位小明家。第二種就直接了,直接用名字來命名。想找小明家就輸入“小明家”。現在第一種比較普遍和常用,就是我們熟悉的網址(網絡上的地址)來定位資源。格式就是

協議+主機名+端口+資源     #沒設端口就用默認端口
http://www.zhihu.com/index.html  #這裏沒設端口,就用默認端口

請求方法(客戶端的命令)

身爲客戶端,當你派出一名HTTP去服務器那時,你不可能什麼都不囑咐的,你必須得告訴服務器你想要的是什麼。你可以傳達5種命令給服務器

  1. GET 獲取數據
  2. POST 提交數據給服務器,用於表單
  3. PUT 創建或修改資源
  4. DELETE 刪除資源
  5. HEAD 獲取響應的首部

狀態碼(服務器的響應)

對於客戶端的請求,服務器會做出處理結果,我們稱爲狀態碼。
狀態碼是一個三位數字的代碼,告知客戶端請求是否成功。

HTTP狀態碼 描述
200 成功處理
302 重定向
404 沒找到

當然,每一個狀態碼後面會跟着一個原因短語,像:
200 ok
200 Success

報文

上面我們知道,HTTP只是個跑腿的信使,他傳達的是他手裏的文書,Web世界裏叫報文。這些報文作爲官方文書,當然要有一定的格式了。

MIME類型

MIME標記多媒體內容,什麼圖片啊,電影啊,視頻啊,文字啊等等。
Web**服務器**會爲所有的HTTP對象數據附加一個MIME類型。
意思是服務器的報文封面必須加上一個MIME類型。然後瀏覽器收到報文後,先看下封面的MIME類型,看看是否是自己需要的,是否是自己能處理的。

MIME印記格式
Content-type = 對象類型/子類型
如Content-type = image/jpeg

來學學各個印記的結印手法

  • HTML文本: text/html
  • ASCII純文本: text/plain
  • JPEG格式的圖片: image/jpeg
  • GIF格式的圖片: image/gif
  • Apple的QuickTime電影: video/quicktime

現在來看下報文的格式

起始行
首部
主體

對於客戶端來講

  • 起始行:要做什麼 (請求方法,資源名, HTTP版本)
  • 首部:用戶代理,主機,接受的格式,語言等
  • 主體:可選的,主要是數據內容(GET不用)

對於服務器來講

  • 起始行:處理結果(HTTP版本, 狀態碼, 原因短語)
  • 首部: MIME類型,長度等
  • 主體:響應的數據內容

具體的實例可以自己去看

連接(TCP)

忘了一個很重要的事,上面提到我們有了可靠的信使HTTP能夠準確地到達對方那,但是如何能讓手中的報文準確地到達對方手裏呢?就是說準確地讓對方明白我的意思,不能誤解我的含義。這時候聰明可靠的信使HTTP使用了一種叫作TCP的方式,他說一句,確認對方完全理解了,再說下一句。直到整個報文讀完。這叫做面向連接,即TCP傳輸控制協議,重點在於“控制”。

我們上面舉的例子是通過聲音來連接交流的,即
我:你聽到我說的話嗎?
對方:聽到了
我們就建立了連接。

下面是HTTP的方式,建立一個TCP/IP的連接

ADDR = (HOST, PORT) #獲取對方的主機名和端口號

主機名端口號怎麼獲取?瀏覽器中的網址就包含了主機名和端口
http://www.zhihu.com/index.html
www.zhihu.com 通過DNS(域名服務)來轉化爲IP地址
端口沒有標註的話就用默認端口
通過一個網址就可以獲取主機名和端口了。
有了IP地址和端口號,就可以像之前那樣通過socket來建立TCP/IP連接

以上便是介紹了Web結構中最重要的兩個應用程序(Web瀏覽器和Web服務器)。

當然也有很多其他的Web應用程序

  • 代理 中介商,接收客戶單請求,將請求轉發給服務器
  • 緩存 常用的內容存儲在離客戶端很近的緩存裏,方便快捷下載
  • 網關 用於將HTTP流量轉換成其他協議,比如FTP
  • 隧道 用於盲轉發
  • Agent代理 代表用戶發起HTTP請求的客戶端程序,如瀏覽器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章