官术网_书友最值得收藏!

2.1 Web應用程序的工作流程

1973年,美國開始將阿帕網(Advanced Research Projects Agency Network,ARPANET)擴展成互聯網。當時的互聯網和現在所看到的互聯網完全不同,不僅非常原始,傳輸速度也慢得驚人,但是卻已具備互聯網的基本形態和功能。此后互聯網在規模和速度兩個方面都得到了飛速的發展。

今天看似平常的網上購物、支付、瀏覽信息等操作都是基于互聯網實現的。但是如果當年沒有蒂姆·伯納斯·李提出萬維網這個創意,今天的人們可能正在通過其他方式來使用互聯網,那些人們耳熟能詳的Web應用程序也可能是另一個樣子。

互聯網最初的目的是實現信息的共享,通過互聯網連接在一起的計算機彼此間可以分享自己存儲的文件。人們可以像瀏覽自己的計算機一樣去查看其他人的計算機,但是當計算機中存儲的內容越來越多時,這顯然變成了一件令人十分苦惱的工作。設想一下,這個難度不亞于在春運期間的火車站里尋找一個走散的同伴。

蒂姆·伯納斯·李顯然不屑于做這種重復的工作,于是他將計算機中重要文檔的地址都進行了記錄,并以超文本的形式保存為一個文件。這樣人們只需要瀏覽這個文件,就能知道自己的計算機中都有哪些文件,以及這些文件都處于什么位置。但是這個文件還不能通過互聯網訪問。

到了1990年,蒂姆·伯納斯·李將歐洲核子研究組織(European Organization for Nuclear Research)的電話號碼簿制作成了第一個Web應用程序,并在自己的計算機上運行了它。網絡用戶可以通過訪問蒂姆·伯納斯·李的計算機來查詢每名研究人員的電話號碼。這個在今天看起來平淡無奇的想法,卻是改變人類命運的偉大發明。蒂姆·伯納斯·李為他的這個發明起名為World Wide Web(也就是WWW)。而他的計算機也成為世界上的第一臺Web服務器。至此,萬維網開始走上了歷史舞臺。

1991年,蒂姆·伯納斯·李又發明了萬維網的3項關鍵技術:

超文本標記語言(Hyper Text Markup Language,HTML);

統一資源標識符(Uniform Resource Identifier,URI);

超文本傳輸協議(Hyper Text Transfer Protocot,HTTP)。

這些規范時至今日仍然發揮著重要的作用。當然,僅僅憑借這3項技術并不能實現現在的Web應用程序,不過在萬維網剛剛誕生時,它們已經足夠用了。

當前的Web應用程序分為靜態和動態兩種類型,而在最初的萬維網時期,則只有靜態Web應用程序。當時的Web應用程序的工作原理很簡單,程序員只需按照HTML編寫靜態頁面并將其放置在Web服務器中。HTML十分簡單易學,它并不是一種編程語言,而是一種標記語言,依靠標記標簽來描述網頁。

如圖2-1所示,當用戶需要訪問這臺Web服務器中的index.html文件時,需要在自己的瀏覽器輸入目標URI。URI是標識某一互聯網資源名稱的字符串,Web服務器上可用的每種資源(如HTML文檔、圖像、視頻片段、程序等)都由一個URI進行定位。而人們平時使用的統一資源定位器(Uniform Resource Locator,URL)就是URI的一種實現。一個簡單的URL由以下3部分組成:

用于訪問資源的協議(如HTTP);

要與之通信的Web服務器的地址;

主機上資源的路徑。

當圖2-1中的Web服務器的IP地址為192.168.0.1時,用戶可以使用http://192.168.0.1/index. html這個URL來獲取上面的資源。這里的index.html就是主機上資源的路徑。如圖2-2所示,這個路徑看起來有些復雜,但是實際上與主機操作系統的目錄是相互關聯的。

圖2-1 放入Web服務器的靜態文檔

圖2-2 將個人計算機作為Web服務器時的目錄

這里以基于Windows操作系統的計算機為例,當其安裝了Web服務器軟件之后,就成為一個Web服務器。這個實例以Windows操作系統D盤下的WWW文件夾作為Web發布目錄,并將其進行了映射,訪問http://192.168.0.1/相當于在Windows操作系統下訪問D:\WWW\。所以,用戶同樣可以使用http://192.168.0.1/Test/test1.htm訪問計算機中的test1.htm文件。這里需要注意的是,Windows約定使用反斜線(\)作為路徑中的分隔符,UNIX和Web應用則使用正斜線(/)作為路徑中的分隔符。

Web服務器已準備完畢,現在切換到客戶端。萬維網的客戶端就是常使用的各種瀏覽器(如火狐、Google Chrome等)。客戶端的第一個功能是將用戶的請求按照HTTP標準封裝成報文發送給Web服務器,如圖2-3所示。

Web服務器接收HTTP請求后,會對其進行解析,并將其請求的資源返回給客戶端,如圖2-4所示。

圖2-3 按照HTTP標準封裝成報文

圖2-4 客戶端與服務端之間的通信

HTTP的請求和應答都是以數據包的形式傳輸的,但是在瀏覽器中看到和操作的都是十分直觀的圖形化頁面。這就要歸功于客戶端的第二個功能——解析Web服務器返回的HTTP應答,然后以常見的頁面樣式呈現出來,如圖2-5所示。

圖2-5 瀏覽器將HTTP應答解析為圖形化頁面

前面介紹的是靜態Web應用程序的情形,在這個實例中Web服務器的工作是接收來自客戶端的請求,對其解析后再將請求的資源以應答的方式返回給客戶端。在這種情況下,服務器所面臨的安全威脅主要來自操作系統(Windows和Linux操作系統等)和Web服務器程序(IIS和Apache等)的漏洞和錯誤配置等,而用HTML編寫的靜態頁面本身并不存在任何漏洞。由于沒有身份驗證機制,Web服務器所發布的內容本身就允許被所有人所訪問,同時也不會保存用戶的任何信息,因此并不存在信息泄露的危險。在這種情況下,Web服務器的安全維護難度相對較小。攻擊者所造成的破壞也只限于篡改 Web 應用程序頁面,或者讓Web應用程序服務器無法被訪問。

隨著萬維網的發展,單純使用靜態技術的 Web 應用程序顯得越來越無法滿足使用者的需要,其主要缺陷如下。

擴展性極差,如果要修改Web應用程序,必須重新編寫應用程序代碼。

純靜態的Web應用程序存儲信息時,所占用的空間相當大。

使用者只能對純靜態的Web應用程序進行讀操作,無法實現交互。

其中最后一點是最為致命,試想一下,如果現在十分流行的購物Web應用程序(如淘寶)上只能展示商品信息,但是用戶在客戶端既不能下單購物,也不能對商品進行評論,那這個應用程序還會有這么大的影響力嗎?

基于動態技術的Web應用程序的出現則有效解決了上述問題。動態技術需要使用專門的服務器端編程語言來實現,如PHP、JSP、ASP.net等。圖2-6給出了一個使用PHP語言編寫的簡單動態Web應用程序。

圖2-6 一個簡單的動態Web應用程序

這時的Web服務端除了用來響應客戶端請求的Web服務器軟件之外,還需要一個專門用來處理服務器端編程語言的解釋器,有時還會需要儲存數據的數據庫。由于Web應用程序采用的編程語言不同,服務器端的組織結構也有所不同。例如,使用PHP語言編寫的動態Web應用程序的服務器端組織結構,如圖2-7所示。

相比單純的靜態Web應用,動態Web應用程序中的網頁實際上并不是獨立存在于服務器上的網頁文件。只有當用戶請求時,Web服務器才會生成并返回一個完整的網頁。這樣既可以大大降低網站維護的工作量,還可以實現更多的功能。

但是PHP語言引擎、數據庫和動態Web應用程序的加入,導致服務端遭受攻擊的情況變得更加嚴重了,其中的重災區就是動態Web應用程序。目前用來開發動態Web應用程序的語言就有數十種,僅國內就有數以百萬計的動態Web應用程序發布到了互聯網上,它們的代碼質量參差不齊,其中不乏漏洞百出者。而動態Web應用程序本身的安全性往往又與程序員的個人能力息息相關。

圖2-7 使用PHP語言編寫的動態Web應用程序的服務端組織結構

主站蜘蛛池模板: 京山县| 民和| 宣威市| 沅江市| 历史| 九江县| 宝鸡市| 青铜峡市| 晋州市| 扶余县| 宁阳县| 如东县| 营口市| 奇台县| 神木县| 长武县| 南召县| 正镶白旗| 威信县| 三原县| 德清县| 沁源县| 砚山县| 长汀县| 鄂伦春自治旗| 赤壁市| 土默特左旗| 金川县| 建阳市| 云林县| 石棉县| 漾濞| 唐河县| 大洼县| 孝感市| 江油市| 类乌齐县| 兴化市| 鹤峰县| 湄潭县| 邵东县|