Http:超文本傳輸協(xié)議,在我們?nèi)缃竦木W(wǎng)絡(luò)時(shí)代。我們每天瀏覽著萬(wàn)萬(wàn)千千的網(wǎng)頁(yè),圖片,文字,這些都離不開(kāi)Http,他是我們快速可靠訪(fǎng)問(wèn)世界各地的web服務(wù)器資源地基礎(chǔ)。Http使用的是可靠地?cái)?shù)據(jù)傳輸協(xié)議TCP協(xié)議。這樣就是保證了我們所訪(fǎng)問(wèn)資源的萬(wàn)無(wú)一失,不會(huì)產(chǎn)生數(shù)據(jù)丟失或者損壞。這也可以使我們開(kāi)發(fā)人員把更多的經(jīng)歷放在程序業(yè)務(wù)細(xì)節(jié)上得編寫(xiě)。避免了考慮一些數(shù)據(jù)傳輸途中的缺陷。下面我們就簡(jiǎn)單來(lái)看一下HTTP有關(guān)的基礎(chǔ)知識(shí)。 一:web服務(wù)器和客戶(hù)端 Web服務(wù)器所使用的是HTTP協(xié)議。所以經(jīng)常被稱(chēng)為HTTP服務(wù)器,這些服務(wù)器存儲(chǔ)了大量的網(wǎng)絡(luò)資源。在我們平時(shí)的上網(wǎng)過(guò)程中。我們每一次點(diǎn)擊的一個(gè)連接其實(shí)就是一個(gè)web請(qǐng)求。當(dāng)我們點(diǎn)擊連接時(shí),web客戶(hù)端,在這里也就是指的是瀏覽器會(huì)向web服務(wù)器發(fā)送一個(gè)請(qǐng)求。Web服務(wù)器根據(jù)請(qǐng)求的資源提供數(shù)據(jù) 二.資源 在我們平時(shí)上網(wǎng)中所看到的的大多數(shù)都是web資源。這些資源都寄存在web服務(wù)器上。當(dāng)我們?cè)L問(wèn)想要的資源時(shí)。Web服務(wù)器會(huì)給我們提供。最簡(jiǎn)單也是最常見(jiàn)的資源就是一些靜態(tài)資源。如一些文檔,靜態(tài)頁(yè)面、音頻等。但資源不一定是靜態(tài)文件,有些資源還可以是根據(jù)需要生產(chǎn)內(nèi)容的軟件程序 1.媒體類(lèi)型 在眾多的web資源中,它們有數(shù)千種不同的數(shù)據(jù)類(lèi)型。HTTP會(huì)給每種要通過(guò)web傳輸?shù)馁Y源對(duì)象定義一個(gè)MIME類(lèi)型的標(biāo)簽。MIME類(lèi)型是一種文本標(biāo)記。表示一種主要的對(duì)象類(lèi)型和一個(gè)特定的子類(lèi)型。中間由一條斜杠來(lái)分割。 常見(jiàn)的MIME類(lèi)型(通用型): 超文本標(biāo)記語(yǔ)言文本 .html text/html xml文檔 .xml text/xml XHTML文檔 .xhtml application/xhtml+xml 普通文本 .txt text/plain AVI文件 .avi video/x-msvideo GZIP文件 .gz application/x-gzip TAR文件 .tar application/x-tar 任意的二進(jìn)制數(shù)據(jù) application/octet-stream 2.URI 每一個(gè)web服務(wù)器資源都有一個(gè)名字,這個(gè)名字叫資源標(biāo)識(shí)符。他就像一個(gè)郵政地址一樣,在世界范圍內(nèi)唯一標(biāo)識(shí)并定位信息資源。URI有兩種形式。分別為URL何URN. 3.URL 統(tǒng)一資源定位符(URL,英語(yǔ)UniformResourceLocator的縮寫(xiě))也被稱(chēng)為網(wǎng)頁(yè)地址,是因特網(wǎng)上標(biāo)準(zhǔn)的資源的地址。 URL的格式由下列三部分組成: 第一部分是協(xié)議(或稱(chēng)為服務(wù)方式); 第二部分是存有該資源的主機(jī)IP地址(有時(shí)也包括端口號(hào)); 第三部分是主機(jī)資源的具體地址。,如目錄和文件名等。 第一部分和第二部分之間用“://”符號(hào)隔開(kāi),第二部分和第三部分用“/”符號(hào)隔開(kāi)。第一部分和第二部分是不可缺少的,第三部分有時(shí)可以省略。現(xiàn)在幾乎所有的URI都是URL 4.URN 統(tǒng)一資源名稱(chēng) (Uniform Resource Name, URN),唯一標(biāo)識(shí)一個(gè)實(shí)體的標(biāo)識(shí)符,但是不能給出實(shí)體的位置。系統(tǒng)可以先在本地尋找一個(gè)實(shí)體,在它試著在Web上找到該實(shí)體之前。它也允許Web位置改變,然而這個(gè)實(shí)體卻還是能夠被找到。URN 可以提供一種機(jī)制,用于查找和檢索定義特定命名空間的架構(gòu)文件。盡管普通的 URL 可以提供類(lèi)似的功能,但是在這方面,URN 更加強(qiáng)大并且更容易管理,因?yàn)?nbsp;URN 可以引用多個(gè) URL。與 URL 不同,URN 與地址無(wú)關(guān)。URN 和 URL 都屬于 URI。URN在web中主要應(yīng)用是下拉菜單的制作。使用URN時(shí)下拉菜單的易擴(kuò)展性將會(huì)得到很大的提高。 三.事務(wù) 一個(gè)HTTP事務(wù)是有一個(gè)web客戶(hù)端的請(qǐng)求和得到一個(gè)web服務(wù)器端響應(yīng)組成的。這種通信時(shí)通過(guò)一種叫http報(bào)文的數(shù)據(jù)塊進(jìn)行傳輸?shù)摹?/span> 1.方法 每一種HTTP請(qǐng)求報(bào)文都包含一種方法。這個(gè)方法指示了服務(wù)器要執(zhí)行什么動(dòng)作(獲取頁(yè)面、運(yùn)行網(wǎng)關(guān)程序、刪除文件等)。 四。種常見(jiàn)的Http方法 1).HEAD 向服務(wù)器索要與GET請(qǐng)求相一致的響應(yīng),只不過(guò)響應(yīng)體將不會(huì)被返回。這一方法可以在不必傳輸整個(gè)響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)消息頭中的元信息。 2).GET 向特定的資源發(fā)出請(qǐng)求。注意:GET方法不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中,例如在web app.中。其中一個(gè)原因是GET可能會(huì)被網(wǎng)絡(luò)蜘蛛等隨意訪(fǎng)問(wèn)?!?/span> 3).POST 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請(qǐng)求體中。POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改?!?/span> 4).PUT 向指定資源位置上傳其最新內(nèi)容。 5).DELETE 請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源。 2.狀態(tài)碼 每一個(gè)HTTP響應(yīng)報(bào)文都會(huì)帶回一個(gè)響應(yīng)狀態(tài)碼。顧名思義,狀態(tài)碼就是反應(yīng)此次請(qǐng)求的結(jié)果狀態(tài)。反應(yīng)請(qǐng)求是否成功,或者要執(zhí)行其他動(dòng)作。常見(jiàn)狀態(tài)碼有200,404,505等 所有狀態(tài)碼詳細(xì)信息:http://baike.baidu.com/view/1790469.htm 3.web頁(yè)面中可以包含多個(gè)對(duì)象 應(yīng)用程序完成一項(xiàng)任務(wù)時(shí)通常會(huì)發(fā)布多個(gè)HTTP 事務(wù)。比如,Web 瀏覽器會(huì)發(fā)布一系列HTTP 事務(wù)來(lái)獲取并顯示一個(gè)包含了豐富圖片的Web 頁(yè)面。瀏覽器會(huì)執(zhí)行一個(gè)事務(wù)來(lái)獲取描述頁(yè)面布局的HTML“框架”,然后發(fā)布另外的HTTP 事務(wù)來(lái)獲取每個(gè)嵌入式圖片、圖像面板、Java 小程序等 五.報(bào)文 一個(gè)HTTP請(qǐng)求報(bào)文由請(qǐng)求行(request line)、請(qǐng)求頭部(header)和請(qǐng)求數(shù)據(jù)3個(gè)部分組成, HTTP有兩類(lèi)報(bào)文:請(qǐng)求報(bào)文和響應(yīng)報(bào)文。請(qǐng)求和響應(yīng)報(bào)文顧名思義,一個(gè)是web客戶(hù)端發(fā)送請(qǐng)求時(shí)響應(yīng)的HTTp 報(bào)文,一個(gè)是web服務(wù)器響應(yīng)式響應(yīng)的Http報(bào)文。其實(shí)他們的格式都是相同的。 我們以一個(gè)實(shí)際的看一下請(qǐng)求報(bào)文: ①是請(qǐng)求方法,GET和POST是最常見(jiàn)的HTTP方法,除此以外還包括DELETE、HEAD、OPTIONS、PUT、TRACE。不過(guò),當(dāng)前的大多數(shù)瀏覽器只支持GET和POST,Spring 3.0提供了一個(gè)HiddenHttpMethodFilter,允許你通過(guò)“_method”的表單參數(shù)指定這些特殊的HTTP方法(實(shí)際上還是通過(guò)POST提交表單)。服務(wù)端配置了HiddenHttpMethodFilter后,Spring會(huì)根據(jù)_method參數(shù)指定的值模擬出相應(yīng)的HTTP方法,這樣,就可以使用這些HTTP方法對(duì)處理方法進(jìn)行映射了。 ①②③統(tǒng)稱(chēng)為請(qǐng)求行 六.連接 這里所說(shuō)的連接其實(shí)就是TCP連接。HTTP報(bào)文就是通過(guò)TCP連接進(jìn)行數(shù)據(jù)傳輸?shù)摹?/span> 1.TCP/IP HTTP是應(yīng)用層協(xié)議,他無(wú)需操心網(wǎng)絡(luò)通信的具體細(xì)節(jié),這些具體工作都交給了同用、可靠地因特網(wǎng)傳輸協(xié)議TCP/IP 從協(xié)議分層模型方面來(lái)講,TCP/IP由四個(gè)層次組成:網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層。 因特網(wǎng)本身就是基于TCP/IP的。它隱藏了許多網(wǎng)絡(luò)傳輸過(guò)程中的弱點(diǎn)和各種網(wǎng)絡(luò)和硬件特點(diǎn)。使各種類(lèi)型的計(jì)算機(jī)和網(wǎng)絡(luò)都能進(jìn)行可靠地通信。只要簡(jiǎn)歷的TCP連接??蛻?hù)端和服務(wù)器端就能進(jìn)行安全可靠地?cái)?shù)據(jù)傳輸。用網(wǎng)絡(luò)術(shù)語(yǔ)來(lái)說(shuō),HTTP 協(xié)議位于 TCP 的上層。HTTP 使用 TCP 來(lái)傳輸其報(bào)文數(shù)據(jù)。與之類(lèi)似,TCP 則位于 IP 的上層。 2.連接、IP地址和端口號(hào) 在HTTP客戶(hù)端在向服務(wù)器發(fā)送報(bào)文之前首先要首先要用端口號(hào)和IP地址建立一個(gè)TCP/IP連接 。建立一個(gè)TCP連接就和一個(gè)小區(qū)的某戶(hù)人家寄信是一個(gè)樣的。小區(qū)的地址就相當(dāng)于一個(gè)IP地址。我們知道他的地址在那個(gè)小區(qū)的哪個(gè)樓了。但我們不知道他的門(mén)牌號(hào)還是無(wú)法確定是哪一家的信。所以我們需要一個(gè)端口號(hào)即為門(mén)牌號(hào)去具體確定是哪一個(gè)服務(wù) 七.Web的結(jié)構(gòu)部件 這里我們主要是先來(lái)了解幾個(gè)基本的概念 1.代理:位于客戶(hù)端和服務(wù)器之間的HTTP中間實(shí)體。他其實(shí)的作用就是接收HTTP請(qǐng)求。然后作為中間人在轉(zhuǎn)發(fā)出去。它有可能對(duì)請(qǐng)求做一些改變也可能原封不動(dòng)的轉(zhuǎn)發(fā)出去。 2.緩存:HTTP的倉(cāng)庫(kù),使常用頁(yè)面的副本可以保存在離客戶(hù)端更近的地方。有了緩存之后可以加快HTTP請(qǐng)求的訪(fǎng)問(wèn)速度。如果一個(gè)請(qǐng)求被請(qǐng)求過(guò)。再次請(qǐng)求的時(shí)候去緩存中找。這樣大大減小了服務(wù)器的壓力。 3.網(wǎng)關(guān):連接其他應(yīng)用程序的特殊Web服務(wù)器。其實(shí)說(shuō)白了,他就是一個(gè)轉(zhuǎn)換網(wǎng)絡(luò)協(xié)議的中間變量。假如它收到一個(gè)HTTP請(qǐng)求。這個(gè)可能訪(fǎng)問(wèn)的資源可能需要用到FTP協(xié)議請(qǐng)求所需資源。這時(shí)就要用到網(wǎng)關(guān) 4隧道:對(duì)HTTP通信報(bào)文進(jìn)行盲轉(zhuǎn)發(fā)的特殊代理。隧道(tunnel)是建立起來(lái)之后,就會(huì)在兩條連接之間對(duì)原始數(shù)據(jù)進(jìn)行盲轉(zhuǎn)發(fā)的HTTP應(yīng)用程序。HTTP隧道通常用來(lái)在一條或多條HTTP連接上轉(zhuǎn)發(fā)非HTTP數(shù)據(jù),轉(zhuǎn)發(fā)時(shí)不會(huì)窺探數(shù)據(jù)。 隧道這個(gè)概念我沒(méi)有理解很透徹,還有些疑惑。希望對(duì)這個(gè)理解透徹的朋友講解一下 5.Agent代理:發(fā)起自動(dòng)HTTP請(qǐng)求的半智能Web客戶(hù)端。我們目前大多數(shù)發(fā)起HTTP請(qǐng)求的web客服端都是基于瀏覽器。Agent代理就是一個(gè)自動(dòng)發(fā)送HTTP請(qǐng)求的工具 到目前為止,一些關(guān)于HTTP協(xié)議的基本概念簡(jiǎn)單介紹完畢,在以后的文章中我還會(huì)細(xì)寫(xiě)有關(guān)概念。敬請(qǐng)期待。 昨晚讀《http權(quán)威指南》疑問(wèn),在將相對(duì)url轉(zhuǎn)為絕對(duì)url時(shí),如果相對(duì)url沒(méi)有方案,主機(jī),端口,參數(shù),查詢(xún)字符串等組件,那么它將繼承基礎(chǔ)的的相關(guān)組件……那么在我們平時(shí)的web開(kāi)發(fā)中,在第一個(gè)頁(yè)面點(diǎn)擊一個(gè)鏈接傳的參數(shù)(查詢(xún)字符串),在鏈接頁(yè)面的request中,可以得到參數(shù)值那如果在鏈接的頁(yè)面中有一個(gè)相對(duì)url鏈接,點(diǎn)擊這個(gè)鏈接之后,是不是在這個(gè)鏈接頁(yè)面的request中也可以得到剛才傳的參數(shù)值?求各位大神幫忙解答。
|
|
來(lái)自: richsky > 《WEB開(kāi)發(fā)》