HTTP权威指南记录 ---- 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請求和響應報文的格式很類似。
報文包括以下三個部分:
- 起始行:報文的第一行就是起始行,在請求報文中用來說明要做什么,在響應報文中說明出現了什么情況。
- 首部字段:起始行后面有多個首部字段。每個首部字段都包含一個名字和一個值,為了便于解析,兩者之間用冒號(: )來分隔。首部以一個空行結束。添加一個首部字段和添加新行一樣簡單。
- 主體:空行之后就是可選的報文主體了,其中包含了所有類型的數據。請求主體中包括了要發送給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代理服務器,可以將經過代理傳送的常用文檔復制保存起來。下一個請求同一文檔的客戶端就可以享受緩存的私有副本所提供的服務了??蛻舳藦母浇木彺嫦螺d文檔會比從遠程Web服務器下載快的多。HTTP定義了很多功能,使得緩存更加高效,并規范了文檔的新鮮度和緩存內容的隱私性。
網關
連接其他應用程序的特殊Web服務器。網關(Gateway)是一種特殊的服務器,作為其他服務器的中間實體使用。通常用于將HTTP流量轉換成其他的協議。網關接受請求時就好像自己是資源的源端服務器一樣??蛻舳丝赡懿⒉恢雷约赫谂c一個網關進行通信。
<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內容檔案,比如一個搜索引擎的數據庫或者為比較購物機器人生成的產品目錄。
總結
以上是生活随笔為你收集整理的HTTP权威指南记录 ---- HTTP概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bash快捷键介绍
- 下一篇: 从一个小demo开始,体验“API经济”