什么是HTTP協(xié)議?_Web服務(wù)器教程
HTTP協(xié)議是什么?
簡(jiǎn)單來(lái)說(shuō),就是一個(gè)基于應(yīng)用層的通信規(guī)范:雙方要進(jìn)行通信,大家都要遵守一個(gè)規(guī)范,這個(gè)規(guī)范就是HTTP協(xié)議。
HTTP協(xié)議能做什么?
很多人首先一定會(huì)想到:瀏覽網(wǎng)頁(yè)。沒(méi)錯(cuò),瀏覽網(wǎng)頁(yè)是HTTP的主要應(yīng)用,但是這并不代表HTTP就只能應(yīng)用于網(wǎng)頁(yè)的瀏覽。HTTP是一種協(xié)議,只要通信的雙方都遵守這個(gè)協(xié)議,HTTP就能有用武之地。比如咱們常用的QQ,迅雷這些軟件,都會(huì)使用HTTP協(xié)議(還包括其他的協(xié)議)。
HTTP協(xié)議如何工作?
大家都知道一般的通信流程:首先客戶端發(fā)送一個(gè)請(qǐng)求(request)給服務(wù)器,服務(wù)器在接收到這個(gè)請(qǐng)求后將生成一個(gè)響應(yīng)(response)返回給客戶端。
在這個(gè)通信的過(guò)程中HTTP協(xié)議在以下4個(gè)方面做了規(guī)定:
1. Request和Response的格式
Request格式:
HTTP請(qǐng)求行
(請(qǐng)求)頭
空行
可選的消息體
注:請(qǐng)求行和標(biāo)題必須以<CR><LF> 作為結(jié)尾(也就是,回車然后換行)。空行內(nèi)必須只有<CR><LF>而無(wú)其他空格。在HTTP/1.1 協(xié)議中,所有的請(qǐng)求頭,除Host外,都是可選的。
實(shí)例:
GET / HTTP/1.1
Host: gpcuster.cnblogs.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Mon, 25 May 2009 03:19:18 GMT
Response格式:
HTTP狀態(tài)行
(應(yīng)答)頭
空行
可選的消息體
實(shí)例:
HTTP/1.1 200 OK
Cache-Control: private, max-age=30
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Mon, 25 May 2009 03:20:33 GMT
Last-Modified: Mon, 25 May 2009 03:20:03 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 25 May 2009 03:20:02 GMT
Content-Length: 12173
消息體的內(nèi)容(略)
詳細(xì)的信息請(qǐng)參考:RFC 2616。
關(guān)于HTTP headers的簡(jiǎn)要介紹,請(qǐng)查看:Quick reference to HTTP headers
2. 建立連接的方式
HTTP支持2中建立連接的方式:非持久連接和持久連接(HTTP1.1默認(rèn)的連接方式為持久連接)。
1) 非持久連接
讓我們查看一下非持久連接情況下從服務(wù)器到客戶傳送一個(gè)Web頁(yè)面的步驟。假設(shè)該貝面由1個(gè)基本HTML文件和10個(gè)JPEG圖像構(gòu)成,而且所有這些對(duì)象都存放在同一臺(tái)服務(wù)器主機(jī)中。再假設(shè)該基本HTML文件的URL為:gpcuster.cnblogs.com/index.html。
下面是具體步騾:
1.HTTP客戶初始化一個(gè)與服務(wù)器主機(jī)gpcuster.cnblogs.com中的HTTP服務(wù)器的TCP連接。HTTP服務(wù)器使用默認(rèn)端口號(hào)80監(jiān)聽(tīng)來(lái)自HTTP客戶的連接建立請(qǐng)求。
2.HTTP客戶經(jīng)由與TCP連接相關(guān)聯(lián)的本地套接字發(fā)出—個(gè)HTTP請(qǐng)求消息。這個(gè)消息中包含路徑名/somepath/index.html。
3.HTTP服務(wù)器經(jīng)由與TCP連接相關(guān)聯(lián)的本地套接字接收這個(gè)請(qǐng)求消息,再?gòu)姆⻊?wù)器主機(jī)的內(nèi)存或硬盤(pán)中取出對(duì)象/somepath/index.html,經(jīng)由同一個(gè)套接字發(fā)出包含該對(duì)象的響應(yīng)消息。
4.HTTP服務(wù)器告知TCP關(guān)閉這個(gè)TCP連接(不過(guò)TCP要到客戶收到剛才這個(gè)響應(yīng)消息之后才會(huì)真正終止這個(gè)連接)。
5.HTTP客戶經(jīng)由同一個(gè)套接字接收這個(gè)響應(yīng)消息。TCP連接隨后終止。該消息標(biāo)明所封裝的對(duì)象是一個(gè)HTML文件。客戶從中取出這個(gè)文件,加以分析后發(fā)現(xiàn)其中有10個(gè)JPEG對(duì)象的引用。
6.給每一個(gè)引用到的JPEG對(duì)象重復(fù)步騾1-4。
上述步驟之所以稱為使用非持久連接,原因是每次服務(wù)器發(fā)出一個(gè)對(duì)象后,相應(yīng)的TCP連接就被關(guān)閉,也就是說(shuō)每個(gè)連接都沒(méi)有持續(xù)到可用于傳送其他對(duì)象。每個(gè)TCP連接只用于傳輸一個(gè)請(qǐng)求消息和一個(gè)響應(yīng)消息。就上述例子而言,用戶每請(qǐng)求一次那個(gè)web頁(yè)面,就產(chǎn)生11個(gè)TCP連接。
2) 持久連接
非持久連接有些缺點(diǎn)。首先,客戶得為每個(gè)待請(qǐng)求的對(duì)象建立并維護(hù)一個(gè)新的連接。對(duì)于每個(gè)這樣的連接,TCP得在客戶端和服務(wù)器端分配TCP緩沖區(qū),并維持TCP變量。對(duì)于有可能同時(shí)為來(lái)自數(shù)百個(gè)不同客戶的請(qǐng)求提供服務(wù)的web服務(wù)器來(lái)說(shuō),這會(huì)嚴(yán)重增加其負(fù)擔(dān)。其次,如前所述,每個(gè)對(duì)象都有2個(gè)RTT的響應(yīng)延長(zhǎng)——一個(gè)RTT用于建立TCP連接,另—個(gè)RTT用于請(qǐng)求和接收對(duì)象。最后,每個(gè)對(duì)象都遭受TCP緩啟動(dòng),因?yàn)槊總(gè)TCP連接都起始于緩啟動(dòng)階段。不過(guò)并行TCP連接的使用能夠部分減輕RTT延遲和緩啟動(dòng)延遲的影響。
在持久連接情況下,服務(wù)器在發(fā)出響應(yīng)后讓TCP連接繼續(xù)打開(kāi)著。同一對(duì)客戶/服務(wù)器之間的后續(xù)請(qǐng)求和響應(yīng)可以通過(guò)這個(gè)連接發(fā)送。整個(gè)Web頁(yè)面(上例中為包含一個(gè)基本HTMLL文件和10個(gè)圖像的頁(yè)面)自不用說(shuō)可以通過(guò)單個(gè)持久TCP連接發(fā)送:甚至存放在同一個(gè)服務(wù)器中的多個(gè)web頁(yè)面也可以通過(guò)單個(gè)持久TCP連接發(fā)送。通常,HTTP服務(wù)器在某個(gè)連接閑置一段特定時(shí)間后關(guān)閉它,而這段時(shí)間通常是可以配置的。持久連接分為不帶流水線(without pipelining)和帶流水線(with pipelining)兩個(gè)版本。如果是不帶流水線的版本,那么客戶只在收到前一個(gè)請(qǐng)求的響應(yīng)后才發(fā)出新的請(qǐng)求。這種情況下,web頁(yè)面所引用的每個(gè)對(duì)象(上例中的10個(gè)圖像)都經(jīng)歷1個(gè)RTT的延遲,用于請(qǐng)求和接收該對(duì)象。與非持久連接2個(gè)RTT的延遲相比,不帶流水線的持久連接已有所改善,不過(guò)帶流水線的持久連接還能進(jìn)一步降低響應(yīng)延遲。不帶流水線版本的另一個(gè)缺點(diǎn)是,服務(wù)器送出一個(gè)對(duì)象后開(kāi)始等待下一個(gè)請(qǐng)求,而這個(gè)新請(qǐng)求卻不能馬上到達(dá)。這段時(shí)間服務(wù)器資源便閑置了。
HTTP/1.1的默認(rèn)模式使用帶流水線的持久連接。這種情況下,HTTP客戶每碰到一個(gè)引用就立即發(fā)出一個(gè)請(qǐng)求,因而HTTP客戶可以一個(gè)接一個(gè)緊挨著發(fā)出各個(gè)引用對(duì)象的請(qǐng)求。服務(wù)器收到這些請(qǐng)求后,也可以一個(gè)接一個(gè)緊挨著發(fā)出各個(gè)對(duì)象。如果所有的請(qǐng)求和響應(yīng)都是緊挨著發(fā)送的,那么所有引用到的對(duì)象一共只經(jīng)歷1個(gè)RTT的延遲(而不是像不帶流水線的版本那樣,每個(gè)引用到的對(duì)象都各有1個(gè)RTT的延遲)。另外,帶流水線的持久連接中服務(wù)器空等請(qǐng)求的時(shí)間比較少。與非持久連接相比,持久連接(不論是否帶流水線)除降低了1個(gè)RTT的響應(yīng)延遲外,緩啟動(dòng)延遲也比較小。其原因在于既然各個(gè)對(duì)象使用同一個(gè)TCP連接,服務(wù)器發(fā)出第一個(gè)對(duì)象后就不必再以一開(kāi)始的緩慢速率發(fā)送后續(xù)對(duì)象。相反,服務(wù)器可以按照第一個(gè)對(duì)象發(fā)送完畢時(shí)的速率開(kāi)始發(fā)送下一個(gè)對(duì)象。
3. 緩存的機(jī)制
HTTP/1.1中緩存的目的是為了在很多情況下減少發(fā)送請(qǐng)求,同時(shí)在許多情況下可以不需要發(fā)送完整響應(yīng)。前者減少了網(wǎng)絡(luò)回路的數(shù)量;HTTP利用一個(gè)“過(guò)期(expiration)”機(jī)制來(lái)為此目的。后者減少了網(wǎng)絡(luò)應(yīng)用的帶寬;HTTP用“驗(yàn)證(validation)”機(jī)制來(lái)為此目的。
HTTP定義了3種緩存機(jī)制:
l Freshness allows a response to be used without re-checking it on the origin server, and can be controlled by both the server and the client. For example, the Expires response header gives a date when the document becomes stale, and the Cache-Control: max-age directive tells the cache how many seconds the response is fresh for.
l Validation can be used to check whether a cached response is still good after it becomes stale. For example, if the response has a Last-Modified header, a cache can make a conditional request using the If-Modified-Since header to see if it has changed.
l Invalidation is usually a side effect of another request that passes through the cache. For example, if URL associated with a cached response subsequently gets a POST, PUT or DELETE request, the cached response will be invalidated.
關(guān)于web緩存方面的內(nèi)容可以參考:Caching Tutorial for Web Authors and Webmasters(英文版)(中文版)
4. 響應(yīng)授權(quán)激發(fā)機(jī)制
這些機(jī)制能被用于服務(wù)器激發(fā)客戶端請(qǐng)求并且使客戶端授權(quán)。
詳細(xì)的信息請(qǐng)參考:RFC 2617: HTTP Authentication: Basic and Digest Access
- 推薦!各類建站程序偽靜態(tài)規(guī)則代碼
- 詳細(xì)的DedeCMS(織夢(mèng))目錄權(quán)限安全設(shè)置教程
- iis安全設(shè)置全方位教程
- 巧妙出招致勝服務(wù)器管理
- Win Server 2003個(gè)人網(wǎng)絡(luò)服務(wù)器安全攻略
- Windows 2003校園Web服務(wù)器常見(jiàn)問(wèn)題
- 清除IIS配置文件后門隱患
- Web服務(wù)器和應(yīng)用程序服務(wù)器有什么區(qū)別
- 虛擬主機(jī)下asp.net 2.0的導(dǎo)航控件treeview,menu等出錯(cuò)
- IIS6.0服務(wù)器架站無(wú)法訪問(wèn)解決方案總結(jié)
- 圖解支持多語(yǔ)言環(huán)境的IIS服務(wù)器配置
- IIS服務(wù)器排錯(cuò)指南及錯(cuò)誤代碼大全
Web服務(wù)器教程Rss訂閱服務(wù)器教程搜索
Web服務(wù)器教程推薦
- IIS設(shè)置網(wǎng)站文件過(guò)期時(shí)間的方法
- 利用數(shù)據(jù)綁定和模板創(chuàng)建Atlas應(yīng)用程序
- Apache服務(wù)器優(yōu)化
- AJAX快速入門之HTTP協(xié)議基礎(chǔ)
- 完美綠色的個(gè)人服務(wù)器:HTTP File Server
- Web服務(wù)器安全配置防范后門
- 輕松架設(shè)Windows 2003中Web服務(wù)器
- Nginx 禁止訪問(wèn)某個(gè)目錄或文件的設(shè)置方法
- apache2.2.8在windows2003下的安全設(shè)置
- IIS支持SHTML的設(shè)置方法(SSI)
- 相關(guān)鏈接:
- 教程說(shuō)明:
Web服務(wù)器教程-什么是HTTP協(xié)議?。