一墩虹,簡單初步的Web和網(wǎng)絡(luò)基礎(chǔ)介紹
當我們在網(wǎng)頁瀏覽器的地址欄中輸入URL時,或許會思考Web頁面是如何誠呈現(xiàn)的呢?Web頁面當然不能憑空顯示出來瘟判,而是通過發(fā)送請求從Web服務(wù)器端獲取文件資源并顯示出來蕉扮。另外整胃,Web是建立在HTTP協(xié)議上通信的。
為了更好的理解HTTP喳钟,我們有必要在此之前了解一下TCP/IP協(xié)議族屁使。TCP/IP協(xié)議族是把互聯(lián)網(wǎng)想關(guān)聯(lián)的協(xié)議集合起來后的總稱。而其中最重要的概念就是分層奔则,協(xié)議族按層次主要分為以下四類:應(yīng)用層蛮寂、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層易茬。
關(guān)于TCP/IP相關(guān)信息在此不做詳述酬蹋,這里就暫用一張圖標來了解一下IP協(xié)議、TCP協(xié)議和DNS服務(wù)在使用HTTP協(xié)議的通信過程中各自發(fā)揮的作用抽莱。
URL正是使用Web瀏覽器等訪問Web頁面時需要輸入的網(wǎng)頁地址绊起。URI是Uniform Resource Identifier的縮寫银锻,是由某個協(xié)議方案表示的資源的定位標識符畅卓。表示指定的URI涵蓋全部必要信息的絕對URI绊袋、絕對URL以及相對URL。相對URL是指從瀏覽器中基本URI處指定的URL璃岳。而絕對URL的格式則是
二年缎,HTTP協(xié)議結(jié)構(gòu)
HTTP協(xié)議用于客戶端和服務(wù)器端之間的通信,并通過請求和響應(yīng)的交換而達成通信铃慷。請求由客戶端發(fā)出单芜,而服務(wù)器回復(fù)響應(yīng)。
請求報文的構(gòu)成如下犁柜,其中POST表示請求訪問服務(wù)器的類型洲鸠,稱之為方法。請求報文是由請求方法、請求URI扒腕、協(xié)議版本绢淀、可選的請求首部字段和內(nèi)容實體構(gòu)成的。
響應(yīng)報文的構(gòu)成如下瘾腰,響應(yīng)報文基本上由協(xié)議版本皆的、狀態(tài)碼(表示請求成功或失敗的數(shù)字代碼)、用以解釋狀態(tài)碼的原因短語蹋盆、可選的響應(yīng)首部字段以及實體主體構(gòu)成费薄。
另外,HTTP是不保存狀態(tài)的協(xié)議栖雾,即無狀態(tài)協(xié)議楞抡,自身不對請求和響應(yīng)之間的通信狀態(tài)進行保存。這樣的設(shè)計對快速處理大量事務(wù)析藕,確保協(xié)議的可伸縮性有一定的幫助召廷,但是無狀態(tài)也會導致業(yè)務(wù)處理變得有時棘手,例如跳轉(zhuǎn)到同一購物網(wǎng)站的其他頁面账胧,當然能夠繼續(xù)保持登錄狀態(tài)是對用戶更友好的柱恤。因此,在此引入了Cookie技術(shù)找爱。Cookie會根據(jù)從服務(wù)器端發(fā)送的響應(yīng)報文內(nèi)的一個叫做Set-Cookie的首部字段信息,通知客戶端保存Cookie泡孩。下圖很形象地描述了Cookie的作用车摄。
HTTP/1.1中可使用的方法有:
1,GET:獲取資源
GET方法用來請求訪問已被URI識別的資源仑鸥。指定的資源經(jīng)服務(wù)器端解析后返回響應(yīng)內(nèi)容吮播。如果請求的是文本,則保持原樣返回眼俊;如果是類似CGI(通用網(wǎng)關(guān)接口)那樣的程序意狠,則返回經(jīng)過執(zhí)行后的輸出結(jié)果。
2疮胖,POST:傳輸實體主體
POST方法用來傳輸實體的主體环戈。雖然用GET方法可以傳輸實體的主體,但一般不用GET方法進行傳輸澎灸,而是用POST方法院塞。但是POST的主要目的不是獲取響應(yīng)的主體內(nèi)容。
3性昭,PUT:傳輸文件
PUT用來傳輸文件拦止。它要求在請求報文的主體中包含文件內(nèi)容,然后保存到請求URI指定的位置。但是要注意的是PUT方法自身不帶驗證機制汹族,任何人都可以上傳文件萧求,這里存在著安全性問題。若配合Web應(yīng)用程序的驗證機制顶瞒,或架構(gòu)設(shè)計采用REST(表征狀態(tài)轉(zhuǎn)移)標準的同類Web網(wǎng)站夸政,就可能會開放使用PUT方法。
4搁拙,HEAD:獲取報文首部
HEAD方法與GET方法一樣秒梳,只是不返回報文主體部分,用于確認URI的有效性及資源更新的日期時間等箕速。
5酪碘,DELETE:刪除文件
DELETE方法用來刪除文件,是與PUT相反的方法盐茎。它按請求URI刪除指定的資源兴垦。但是HTTP/1.1的DELETE方法本身和PUT方法一樣不帶驗證機制,所以一般Web也不使用字柠。當配合Web應(yīng)用程序的驗證機制探越,或遵守REST標準還是有可能會開放使用的。
6窑业,OPTIONS:詢問支持的方法
OPTIONS方法用來查詢針對請求URI指定的資源支持的方法钦幔。
7,TRACE:追蹤路徑
TRACE方法讓Web服務(wù)器端將之前的請求通信環(huán)回給客戶端的方法常柄。
發(fā)送請求時鲤氢,在Max-Forwards首部字段中填入數(shù)值,每經(jīng)過一個服務(wù)器就將該數(shù)字減1西潘,當數(shù)值剛好減為0時就停止繼續(xù)傳輸卷玉,最后接收的請求的服務(wù)器則返回狀態(tài)碼200 OK的響應(yīng)。
客戶端可以通過TRACE方法查詢發(fā)送出去的請求是怎樣唄加工修改/篡改的喷市。
8相种,CONNECT:要求用隧道協(xié)議連接代理
CONNECT方法要求在與代理服務(wù)器通信時建立隧道,實現(xiàn)用隧道協(xié)議進行TCP通信品姓,這其中主要使用SSL和TLS協(xié)議把通信內(nèi)容加密后經(jīng)網(wǎng)絡(luò)隧道傳輸寝并。
持續(xù)連接
最后說下持續(xù)連接。由于HTTP協(xié)議的初始版本中腹备,每次進行一次通信都要斷開一次TCP連接食茎。但是由于傳輸信息量的增大,每次請求都造成的無謂TCP連接建立和斷開馏谨,增加了通信量的開銷别渔。因此,提出了持續(xù)連接HTTP keep-alive方法,它的特點是只要任意一端沒有明確提出斷開連接哎媚,則保持TCP連接狀態(tài)喇伯。這樣減輕了服務(wù)器的負載。在HTTP/1.1中拨与,所有連接都是默認是持續(xù)連接稻据。持續(xù)連接多數(shù)請求以管線化方式發(fā)送成為可能。這樣就能做到同時并行發(fā)送多個請求买喧,而不需要一個接一個地等待響應(yīng)了捻悯。管線化技術(shù)比持續(xù)連續(xù)還要快,請求數(shù)越多淤毛,時間差越明顯今缚。