HTTP服務器存儲了因特網中的數據,若是客戶端發出請求的話,它們會提供數據。客戶端向服務器發送一條HTTP請求,服務器會去尋找所指望的對象,若是成功,就將對象、對象類型、對象長度、以及其餘一些信息放在HTTP響應中發送給客戶端。
數據庫
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事務是由一條請求命令(從客戶端發往服務器)和一個響應結果(從服務器發回客戶端)組成,這種通訊是經過名爲HTTP報文(HTTP message)的格式化數據塊進行的。應用程序完成一項任務時一般會發布多個HTTP事務。
網絡
HTTP支持幾種不一樣的請求命令,這些命令被稱爲HTTP方法(HTTP method)。每條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! (主體)
報文包括如下三個部分:
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。
步驟以下:
如今使用的HTTP協議有幾個版本。HTTP應用程序要儘可能強健地處理各類不一樣的HTTP協議變體。目前仍在使用的版本以下。
位於客戶端和服務器之間的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流量,這樣就能夠將其盲轉發到目的服務器上去了。
發起自動HTTP請求的半智能Web客戶端。用戶Agent代理(或者簡稱爲Agent代理)是表明用戶發起HTTP請求的客戶端程序。全部發布Web請求的應用程序都是HTTP Agent代理。例如:Web瀏覽器。
有些本身會在Web上閒逛的自動用戶Agent代理,能夠在無人監視的狀況下發布HTTP事務並獲取內容。這些自動代理的名字一般都很生動,好比"網絡蜘蛛"(spiders)或者"Web機器人"(Web robots)。網絡蜘蛛會在Web上閒逛,蒐集信息以構建有效的Web內容檔案,好比一個搜索引擎的數據庫或者爲比較購物機器人生成的產品目錄。