記錄 ---- HTTP概述

HTTP概述

Web客戶端與服務器是如何通訊的

HTTP服務器存儲了因特網中的數據,若是客戶端發出請求的話,它們會提供數據。客戶端向服務器發送一條HTTP請求,服務器會去尋找所指望的對象,若是成功,就將對象、對象類型、對象長度、以及其餘一些信息放在HTTP響應中發送給客戶端。
數據庫

資源(Web的內容)來自何方

Web服務器是Web資源(resource)的宿主,Web資源是Web內容的源頭。最簡單的Web資源就是Web服務器文件系統中的靜態文件;資源還能夠是根據須要生成內容的軟件程序,這些動態內容資源能夠根據你的身份、所請求的信息或天天的不一樣時段來產生內容。
瀏覽器

因特網上有數千種不一樣的數據類型,HTTP仔細地給每種要經過Web傳輸的對象都打上了名爲MIME類型(MIME Type)的數據格式標籤。Web服務器會在全部HTTP對象數據附加一個MIME類型,當Web瀏覽器從服務器中取回一個對象時,會去查看相關的MIME類型,看看它是否知道應該如何處理這個對象。
緩存

MIME類型是一種文本標記,表示一種主要的對象類型和一個特定的子類型。最初設計MIME(Multipurpose Internet Mail Extensions,多用途互聯網郵件擴展)是爲了解決在不一樣的電子郵件之間搬移報文時存在的問題。
安全

每一個Web服務器資源都有一個名字,服務器資源名被成爲URI(Uniform Resource Identifier,統一資源標識符)。URI就像因特網上的郵政地址同樣,在世界範圍內惟一標識並定位信息資源。給定了URI,HTTP就能夠解析出對象。URI有兩種形式,分別稱爲URL和URN。
性能優化

URL(Uniform Resource Locator,統一資源定位符)是資源標識符最多見的形式。URL描述了一臺特定服務器上某資源的特定位置,它們能夠明確說明如何從一個精確、固定的位置獲取資源。大部分URL都遵循一種標準格式,這種格式包含三個部分。如今,幾乎全部的URI都是URL。
服務器

  • 第一部分(http),被稱爲方案(scheme),說明了訪問資源所使用的協議類型,能夠告知Web客戶端怎樣訪問資源。
  • 第二部分(www.joes-hardware.com),給出了服務器的因特網地址,這部分告知Web客戶端資源位於何處。
  • 第三部分(/specials/saw-blade.gif),指定了Web服務器上的資源路徑,路徑說明了請求的是服務器上哪一個特定的本地資源。

Web事務是怎樣工做的

一個HTTP事務是由一條請求命令(從客戶端發往服務器)和一個響應結果(從服務器發回客戶端)組成,這種通訊是經過名爲HTTP報文(HTTP message)的格式化數據塊進行的。應用程序完成一項任務時一般會發布多個HTTP事務。
網絡

HTTP支持幾種不一樣的請求命令,這些命令被稱爲HTTP方法(HTTP method)。每條HTTP請求報文都包含一個方法,這個方法會告訴服務器要執行什麼動做。
架構

每條HTTP響應報文返回時都會攜帶一個狀態碼,狀態碼是一個三位數字的代碼,告知客戶端請求是否成功,或者是否須要採起其餘動做。伴隨着每一個數字狀態嗎,HTTP還會發送一條解釋性的「緣由短語」文本
框架

HTTP通訊所使用的報文格式

HTTP報文是由一行一行的簡單字符串組成的,HTTP報文是純文本,不是二進制代碼,因此能夠方便地對其進行讀寫。從Web客戶端發往Web服務器的HTTP報文稱爲請求報文(request message)。從服務器發往客戶端的報文稱爲響應報文(response message),此外沒有其餘類型的HTTP報文。HTTP請求和響應報文的格式很相似。
ide

# 請求報文

GET /test/hi-there.txt HTTP/1.0        (起始行)
-------------------------------
Accept: text/*                         (首部)
Accept-Language: en, fr

-------------------------------


# 響應報文

HTTP/1.0 200 OK                        (起始行)
-------------------------------
Content-type: text/plain               (首部)
Content-length: 19

-------------------------------
Hi! I'm a message!                     (主體)

報文包括如下三個部分:

  • 起始行:報文的第一行就是起始行,在請求報文中用來講明要作什麼,在響應報文中說明出現了什麼狀況。
  • 首部字段:起始行後面有多個首部字段。每一個首部字段都包含一個名字和一個值,爲了便於解析,二者之間用冒號(: )來分隔。首部以一個空行結束。添加一個首部字段和添加新行同樣簡單。
  • 主體:空行以後就是可選的報文主體了,其中包含了全部類型的數據。請求主體中包括了要發送給Web服務器的數據;響應主體中裝載了要返回給客戶端的數據。起始行和首部都是文本形式且都是結構化的,而主體則不一樣,主體中能夠包括任意的二進制數據。固然,主題中也能夠包含文本。

底層TCP網絡傳輸

HTTP報文是經過TCP(Transmission Control Protocol,傳輸控制協議)鏈接從一個地方搬移到另外一個地方去的。HTTP是個應用層協議,HTTP無需操心網絡通訊的具體細節;把聯網的細節都交給了通用、可靠的因特網傳輸協議TCP/IP。只要創建了TCP鏈接,客戶端和服務器之間的報文交換就不會丟失、不會被破壞,也不會在接收時出現錯序了。

TCP提供了:

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

在HTTP客戶端向服務器發送報文以前,須要經過IP(Internet Protocol,網際協議)地址和端口號在客戶端和服務器之間創建一條TCP/IP鏈接。在TCP中,須要知道服務器的IP地址,以及與服務器上運行的特定軟件相關的TCP端口號。主機名就是P地址比較人性化的別稱,能夠經過一種稱爲DNS(Domain Name Service,域名服務)的機制方便地將主機名轉換爲IP地址。HTTP的URL中沒有端口號時,能夠假設默認端口號是80。

步驟以下:

  • 瀏覽器從URL中解析出服務器的主機名;
  • 瀏覽器將服務器的主機名轉換成服務器的IP地址;
  • 瀏覽器將端口號(若是有的話)從URL中解析出來;
  • 瀏覽器創建一條與Web服務器的TCP鏈接;
  • 瀏覽器向服務器發送一條HTTP報文請求;
  • 服務器向瀏覽器返回一條HTTP響應請求;
  • 關閉鏈接,瀏覽器顯示文檔。

不一樣的HTTP協議版本

如今使用的HTTP協議有幾個版本。HTTP應用程序要儘可能強健地處理各類不一樣的HTTP協議變體。目前仍在使用的版本以下。

  • HTTP/0.9:HTTP的1991原型版本稱爲HTTP/0.9。這個協議有不少嚴重的設計缺陷,只應該用於與老客戶端的交互。HTTP/0.9只支持GET方法,不支持多媒體內容的MIME類型、各類HTTP首部,或者版本號。HTTP/0.9定義的初衷是爲了獲取簡單的HTML對象,它很快就被HTTP/1.0取代了。
  • HTTP/1.0:1.0是第一個獲得普遍使用的HTTP版本。HTTP/1.0添加了版本號、各類HTTP首部、一些額外的方法,以及對多媒體對象的處理。HTTP/1.0使得包含生動圖片的Web頁面和交互式表格成爲可能,而這些頁面和表格促使萬維網爲人們普遍地接受。這個規範從未獲得良好地說明。在這個HTTP協議的商業演進和學術研究都在快速進行的時代,它集合了一系列的最佳實踐。
  • HTTP/1.0+:在20世紀90年代中葉,不少流行的Web客戶端和服務器都在飛快地向HTTP中添加各類特性,以知足快速擴張且在商業上十分紅功的萬維網的須要。其中不少特性,包括持久的keep-alive鏈接、虛擬主機支持,以及代理鏈接支持都被加入到HTTP之中,併成爲非官方的事實標準。這種非正式的HTTP擴展版本一般稱爲HTTP/1.0+。
  • HTTP/1.1:HTTP/1.1重點關注的是校訂HTTP設計中的結構性缺陷,明確語義,引入重要的性能優化措施,並刪除一些很差的特性。HTTP/1.1還包含了對20世紀90年代末正在發展中的更復雜的Web應用程序和部署方式的支持。HTTP/1.1是當前使用的HTTP版本。
  • HTTP-NG(又名HTTP/2.0):HTTP-NG是HTTP/1.1後繼結構的原型建議,它重點關注的是性能的大幅優化,以及更強大的服務邏輯遠程執行框架。

Web架構組件

代理

位於客戶端和服務器之間的HTTP中間實體。代理位於客戶端和服務器之間,接收全部客戶端的HTTP請求,並將這些請求轉發給服務器(可能會對請求進行修改後轉發)。代理還能夠對請求和響應進行過濾。

緩存

HTTP的倉庫,使經常使用頁面的副本能夠保存在離客戶端更近的地方。Web緩存(Web cache)或代理緩存(proxy cache)是一種特殊的HTTP代理服務器,能夠將通過代理傳送的經常使用文檔複製保存起來。下一個請求同一文檔的客戶端就能夠享受緩存的私有副本所提供的服務了。客戶端從附近的緩存下載文檔會比從遠程Web服務器下載快的多。HTTP定義了不少功能,使得緩存更加高效,並規範了文檔的新鮮度和緩存內容的隱私性。

網關

鏈接其餘應用程序的特殊Web服務器。網關(Gateway)是一種特殊的服務器,做爲其餘服務器的中間實體使用。一般用於將HTTP流量轉換成其餘的協議。網關接受請求時就好像本身是資源的源端服務器同樣。客戶端可能並不知道本身正在與一個網關進行通訊。

<p>例如,一個HTTP/FTP網關會經過HTTP請求接收對FTP URI的請求,但經過FTP協議來獲取文檔。獲得的文檔會被封裝成一條HTTP報文,發送給客戶端</p>

隧道

對HTTP通訊報文進行盲轉發的特殊代理。隧道(tunnel)是創建起來以後,就會在兩條鏈接之間對原始數據進行盲轉發的HTTP應用程序。HTTP隧道一般用來在一條或多條HTTP鏈接上轉發非HTTP數據,轉發時不會窺探數據。

HTTP隧道的一種常見用途是經過HTTP鏈接承載SSL加密的SSL(Secure Sockets Layer,安全套接字層)流量,這樣SSL流量就能夠穿過只容許Web流量經過的防火牆了。HTTP/SSL隧道收到一條HTTP請求,要求創建一條到目的地址和端口的輸出鏈接,而後在HTTP信道上經過隧道傳輸加密的SSL流量,這樣就能夠將其盲轉發到目的服務器上去了。

Agent代理

發起自動HTTP請求的半智能Web客戶端。用戶Agent代理(或者簡稱爲Agent代理)是表明用戶發起HTTP請求的客戶端程序。全部發布Web請求的應用程序都是HTTP Agent代理。例如:Web瀏覽器。

有些本身會在Web上閒逛的自動用戶Agent代理,能夠在無人監視的狀況下發布HTTP事務並獲取內容。這些自動代理的名字一般都很生動,好比"網絡蜘蛛"(spiders)或者"Web機器人"(Web robots)。網絡蜘蛛會在Web上閒逛,蒐集信息以構建有效的Web內容檔案,好比一個搜索引擎的數據庫或者爲比較購物機器人生成的產品目錄。

相關文章
相關標籤/搜索