1、Http概述

1.1 Web客戶端和服務器 

HTTP 客戶端和 HTTP 服務器共同構成了萬維網的基本組件,客戶端向服務器發送 HTTP 請求, 服務器會在 HTTP 響應中回送所請求的數據。 

示意圖:


1.2 媒體類型

因特網上有數千種不同的數據類型,HTTP 仔細地給每種要通過 Web 傳輸的對象都打上了名爲MIME類型(Multipurpose Internet Mail Extension type)的數據格式標籤。 

在Header中經常看見:

Content-type: image/jpeg
Content-length: 12984

其中的image/jpeg就表示MIME類型。

幾種常見的MIME類型:

  • HTML 格式的文本文檔由 text/html 類型來標記。

  • 普通的ASCII文本文檔由text/plain類型來標記。

  • JPEG 格式的圖片爲 image/jpeg 類型。

  • GIF 格式的圖片爲 image/gif 類型。

  • Apple 的 QuickTime 電影爲 video/quicktime 類型。

  • 微軟的PowerPoint演示文件爲application/vnd.ms-powerpoint類型。 


1.3 URI 統一資源標識符(Uniform Resource Identifier) 

  • URI 就像因特網上的郵箱地址一樣,在世界範圍內唯一標識並定位信息資源。 
  • URI 有兩種形式,分別稱爲 URL 和 URN。 

統一資源定位符(URL) 

URL 描述了一臺特定服務器上某資源的特定位置。 

協議、服務器和本地資源示意圖:

大部分 URL 都遵循一種標準格式,這種格式包含三個部分:

  • URL 的第一部分被稱爲方案(scheme),說明了訪問資源所使用的協議類型。這 部分通常就是 HTTP 協議(http://)。
  • 第二部分給出了服務器的因特網地址(比如,www.joes-hardware.com)。
  • 其餘部分指定了Web服務器上的某個資源(比如,/specials/saw-blade.gif)。 

統一資源名(URN) 

URN 是作爲特定內容的唯一名稱使用 的,與目前的資源所在地無關。使用這些與位置無關的 URN,就可以將資源四處搬 移。通過 URN,還可以用同一個名字通過多種網絡訪問協議來訪問資源。 

URN 仍然處於試驗階段,還未大範圍使用。 


1.4事務

一個 HTTP 事務由一條(從客戶端發往服務器的)請求命令和一個(從服務器 發回客戶端的)響應結果組成。這種通信是通過名爲HTTP報文(HTTP message) 的格式化數據塊進行的:

1.4.1 方法 

HTTP支持幾種不同的請求命令,這些命令被稱爲HTTP方法(HTTP method)。每 條 HTTP 請求報文都包含一個方法。這個方法會告訴服務器要執行什麼動作(獲取 一個 Web 頁面、運行一個網關程序、刪除一個文件等)。 

常見的集中方法:

HTTP方法 

描 述
GET 從服務器向客戶端發送命名資源
PUT 將來自客戶端的數據存儲到一個命名的服務器資源中去 DELETE 從服務器中刪除命名資源
POST 將客戶端數據發送到一個服務器網關應用程序
HEAD 僅發送命名資源響應中的 HTTP 首部


1.4.2 狀態碼 

每條 HTTP 響應報文返回時都會攜帶一個狀態碼,比如200。


1.5 報文 

HTTP 報文是由一行一行的簡單字符串組成的。HTTP 報文都是純文本,不是二進 制代碼,所以人們可以很方便地對其進行讀寫。 示例:

兩種不同的報文:

  • 從Web客戶端發往Web服務器的HTTP報文稱爲請求報文(request message)。
  • 從 服務器發往客戶端的報文稱爲響應報文(response message) 。
 

HTTP 報文包括以下三個部分。

  • 起始行   報文的第一行就是起始行,在請求報文中用來說明要做些什麼,在響應報文中說明出現了什麼情況。
  • 首部字段   起始行後面有零個或多個首部字段。每個首部字段都包含一個名字和一個值,用冒號(:)來分隔。首部以一個空行結束。
  • 主體   包含了所有類型的數據。請求主體中包括了要發送給 Web 服務器的數據;響應主體中裝載了要返回給客戶端的數據。
 報文示例:

1.6 TCP/IP

Http協議在TCP的上層,傳輸的報文就是通過TCP協議從一個地方傳遞到另一個地方的。而TCP協議的特點:

• 無差錯的數據傳輸;
• 數據總是會按照發送的順序到達;
• 未分段的數據流(可以在任意時刻以任意尺寸將數據發送出去)。 

HTTP的位置:

在使用HTTP客戶端發送報文之前,需要使用IP(Internet Protocol)協議通過地址端口號在客戶端和服務器之間建立一條TCP/IP連接。

IP地址和端口號是通過URL來獲取的:

http://207.200.83.29:80/index.html

http://www.netscape.com:80/index.html

http://www.netscape.com/index.html 

上面這三個其實是訪問的同一個資源。。。。域名服務DNS(Domain Name Service)可以將域名轉換成IP地址,所以最終都是通過IP地址和端口號訪問資源的。80端口號呢是默認的,可以不寫。
所以,瀏覽器的連接處理過程,還是通過圖片來看比較簡單易懂:

給大家介紹一下,這是瀏覽器的處理過程,@XXX

(a) 瀏覽器從 URL 中解析出服務器的主機名;
(b) 瀏覽器將服務器的主機名轉換成服務器的 IP 地址; (c) 瀏覽器將端口號(如果有的話)從 URL 中解析出來; (d) 瀏覽器建立一條與 Web 服務器的 TCP 連接;
(e) 瀏覽器向服務器發送一條 HTTP 請求報文;
(f) 服務器向瀏覽器回送一條 HTTP 響應報文;
(g) 關閉連接,瀏覽器顯示文檔。 


 

 1.7 HTTP協議版本

  • HTTP/0.9
    HTTP/1.0
    HTTP/1.0+
    HTTP/1.1
    HTTP-NG(又名 HTTP/2.0)


     

1.8 Web組件

• 代理
  位於客戶端和服務器之間的 HTTP 中間實體。接收客戶端的HTTP請求並轉發給服務器,轉發給服務器之前可能會對請求進行修改哦,這樣做的一個應用就是對請求進行過濾,或者對下載的應用程序進行病毒檢測,再就是爲了保障下一代的身心健康,過濾一些非法的內容,你懂得~。
• 緩存
  HTTP 的倉庫,使常用頁面的副本可以保存在離客戶端更近的地方。這樣做的好處就是加快了客戶端請求的響應速度,畢竟緩存一般在離客戶端比較近的地方,但是呢,應該有響應的機制能夠保證緩存中的內容和服務器中的內容應該時刻保持一致,否則會出現問題的。。。
• 網關
  連接其他應用程序的特殊 Web 服務器。通常用來將HTTP轉換成其他的協議。使用網關的時候網關強行假裝自己是客戶端要訪問的資源服務器,所以,網戀有風險啊。。。
• 隧道
  對 HTTP 通信報文進行盲轉發的特殊代理。隧道一旦建立,連接之間就可以對原始的數據進行盲轉發,注意是原始數據哦~

• Agent 代理
  發起自動 HTTP 請求的半智能 Web 客戶端。代理代理,就是代表用戶發起HTTP請求的客戶端程序。最常用的一種,基本都用過的:Web瀏覽器,驚不驚喜~  還有各種爬蟲等。


 

 

 
參考:HTTP權威指南。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章