1. 程式人生 > >什麼是Web?及web伺服器原理

什麼是Web?及web伺服器原理

什麼是Web?

Web就是一種超文字資訊系統,Web的一個主要的概念就是超文字連線,它使得文字不再象一本書一樣是固定的線性的。而是可以從一個位置跳到另外的位置。你可以從中獲取更多的資訊。可以轉到別的主題上。想要了解某一個主題的內容只要在這個主題上點一下,就可以跳轉到包含這一主題的文件上。正是這種多連線性我們才把它稱為Web。 
World Wide Web,簡稱WWW,是英國人TimBerners-Lee 1989年在歐洲共同體的一個大型科研機構任職時發明的。通過WEB,網際網路上的資源,可以在一個網頁裡比較直觀的表示出來;而且資源之間,在網頁上可以鏈來鏈去。在WEB1.0上做出巨大貢獻的公司有Netscape,Yahoo和Google。 Netscape研發出第一個大規模商用的瀏覽器,Yahoo的楊致遠提出了網際網路黃頁, 而Google後來居上,推出了大受歡迎的搜尋服務。 
搜尋最大的貢獻是,把網際網路上海量的資訊,用機器初步分了個線索。但是,光知道網頁裡有哪些關鍵字,只解決了人瀏覽網頁的需求。所以,Tim-Berners-Lee在提出WWW不久,即開始推崇語義網(Semantic Web)的概念。為什麼呢?因為網際網路上的內容,機器不能理解。他的理想是,網頁製作時和架構資料庫時,大家都用一種語義的方式,將網頁裡的內容表述成機器可以理解的格式。這樣,整個網際網路就成了一個結構嚴謹的知識庫。從理想的角度,這是很誘人的,因為科學家和機器都喜歡有次序的東西。Berners-Lee關心的是,網際網路上資料,及能否被其它的網際網路應用所重複引用。舉一個例子說明標準資料庫的魅力。有個產品叫LiberyLink。裝了它後,到Amazon上去瀏覽時,會自動告訴你某一本書在使用者當地的圖書館能否找到,書號是多少等。因為一本書有統一的書號和書名,兩個不同的網際網路服務(Amazon 和當地圖書館資料庫檢索)可以公享資料,給使用者提供全新服務。 
但是,語義網提出之後,曲高和寡,響應的人不多。為什麼?因為指望要網頁的製作者提供這麼多額外的資訊去讓機器理解一個網頁,太難;簡直就是人給機器打工。這違反了人們能偷懶就偷懶的本性。看看Google的成功就知道。 Google有個Page Rank技術,將網頁之間互相連結的關係,用來做結果排序的一個依據,變相利用了網頁製作人的判斷力。想一想網頁的製作者們,從數量來說,比純瀏覽者的數量小得多。但Google就這一個革新,用上了網頁的製作者的一部份力量,已將其推上了網際網路的頂峰。 
所以網際網路下一步,是要讓所有的人都忙起來,全民織網,然後用軟體,機器的力量使這些資訊更容易被需要的人找到和瀏覽。如果說WEB1.0是以資料為核心的網,那我覺得WEB2.0是以人為出發點的網際網路。我們看一看最近的一些WEB2.0產品,就可以理解以上觀點。 
Blog: 使用者織網,發表新知識,和其他使用者內容連結,進而非常自然的組織這些內容。 
RSS: 使用者產生內容自動分發,定閱 
Podcasting: 個人視訊/聲頻的釋出/定閱 
SNS: blog+人和人之間的連結 
WIKI: 使用者共同建設一個大百科全書 
從知識生產的角度看,WEB1.0的任務,是將以前沒有放在網上的人類知識,通過商業的力量,放到網上去。WEB2.0的任務是,將這些知識,通過每個使用者的瀏覽求知的力量,協作工作,把知識有機的組織起來,在這個過程中繼續將知識深化,併產生新的思想火花; 
從內容產生者角度看,WEB1.0是商業公司為主體把內容往網上搬,而WEB2.0則是以使用者為主,以簡便隨意方式,通過blog/podcasting 方式把新內容往網上搬; 
從互動性看,WEB1.0是網站對使用者為主;WEB2.0是以P2P為主。 
從技術上看,WEB客戶端化,工作效率越來越高。比如像Ajax技術, GoogleMAP/Gmail裡面用得出神入化。 
我們看到,使用者在網際網路上的作用越來越大;他們貢獻內容,傳播內容,而且提供了這些內容之間的連結關係和瀏覽路徑。在SNS裡面,內容是以使用者為核心來組織的。WEB2.0是以使用者為核心的網際網路。 
那麼,這種意義上的WEB2.0,和Tim Berners-Lee的語義網,有什麼不同呢?語義網的出發點是資料的規整及可重複被機器呼叫,提出使用語義化的內容釋出工具, 試圖從規則和技術標準上使網際網路更加有序。 Google等搜尋引擎,在沒有語義網的情況下,儘可能的給網際網路提供了線索。 WEB2.0則是鼓勵使用者用最方便的辦法釋出內容(blog/podcasting),但是通過使用者自發的(blog)或者系統自動以人為核心(SNS)的互相連結給這些看似凌亂的內容提供索引。因為這些線索是使用者自己提供,更加符合使用者使用感受。網際網路逐漸從以關鍵字為核心的組織方式和閱讀方式,到以網際網路使用者的個人portal(SNS)為線索,或者以個人的思想脈絡(blog/rss)為線索的閱讀方式。WEB2.0強呼叫戶之間的協作。WIKI是個典型例子。從這個角度看,網際網路是在變得更有序,每個使用者都在貢獻:要麼貢獻內容,要麼貢獻內容的次序. 
對下一代網際網路的看法,還會有很多的討論。有一點可以肯定,WEB2.0是以人為核心線索的網。提供更方便使用者織網的工具,鼓勵提供內容。根據使用者在網際網路上留下的痕跡,組織瀏覽的線索,提供相關的服務,給使用者創造新的價值,給整個網際網路產生新的價值,才是WEB2.0商業之道。

Web的特點:

一、Web是圖形化的和易於導航的(navigate)

Web 非常流行的一個很重要的原因就在於它可以在一頁上同時顯示色彩豐富的圖形和文字的效能。在Web之前Internet上的資訊只有文字形式。Web可以提供將圖形、音訊、視訊資訊集合於一體的特性。同時,Web是非常易於導航的,只需要從一個連線跳到另一個連線,就可以在各頁各站點之間進行瀏覽了。

二、Web與平臺無關

無論你的系統平臺是什麼,你都可以通過Internet訪問WWW。瀏覽WWW對你的系統平臺沒有什麼限制。無論從Windows平臺、UNIX平臺、Macintosh還是別的什麼平臺我們都可以訪問WWW。對WWW的訪問是通過一種叫做瀏覽器(browser)的軟體實現的。如Netscape 的Navigator、NCSA的Mosaic、Microsoft的Explorer等。

三、Web是分散式的

大量的圖形、音訊和視訊資訊會佔用相當大的磁碟空間,我們甚至無法預知資訊的多少。對於Web沒有必要把所有資訊都放在一起,資訊可以放在不同的站點上。只需要在瀏覽器中指明這個站點就可以了。使在物理上並不一定在一個站點的資訊在邏輯上一體化,從使用者來看這些資訊是一體的。

Web 是動態的

最後,由於各Web站點的資訊包含站點本身的資訊,資訊的提供者可以經常對站上的資訊進行更新。如某個協議的發展狀況,公司的廣告等等。一般各資訊站點都儘量保證資訊的時間性。所以Web站點上的資訊是動態的。經常更新的。這一點是由資訊的提供者保證的。

Web動態的特性還表現在Web是互動的。

Web的互動性首先表現在它的超連線上,使用者的瀏覽順序和所到站點完全由他自己決定。另外通過FORM的形式可以從伺服器方獲得動態的資訊。使用者通過填寫FORM可以向伺服器提交請求,伺服器可以根據使用者的請求返回相應資訊。

Web伺服器工作原理:

一個 Web 伺服器也被稱為 HTTP 伺服器,它通過 HTTP 協議與客戶端通訊。這個客戶端通常指的是 Web 瀏覽器。一個基於 Java 的 Web 伺服器用到二個重要的類,java.net.Socket 與 java.net.ServerSocket ,並通過 HTTP 訊息通訊。因此,本文從討論 HTTP 與這二個類開始,然後我將解釋一個與本文相關的簡單的 Web 應用。

The Hypertext Transfer Protocol(HTTP)

HTTP 是一種讓 Web 伺服器與瀏覽器(客戶端)通過 Internet 傳送與接收資料的協議。它是一個請求、響應協議--客戶端發出一個請求,伺服器響應這個請求。HTTP 運用可靠的 TCP 連線,通常用的 TCP 80 埠。它的第一個版本是 HTTP/0.9 ,然後被 HTTP/1.0 取代。當前的版本是 HTTP/1.1 ,由RFC2616(.pdf) 定義。

本節主要對應 HTTP 1.1 ,足夠使你充分理解由 Web 伺服器程式發出的訊息。如果你對更加詳細的知識有興趣,可以參考 RFC2616 。

在 HTTP 中,客戶端總是通過建立一個連線與傳送一個 HTTP 請求來發起一個事務。伺服器不能主動去與客戶端聯絡,也不能給客戶端發出一個回叫連線。客戶端與伺服器端都可以提前中斷一個連線。例如,當用一個瀏覽器下載一個檔案時,你可以通過點選“停止”鍵來中斷檔案的下載,關閉與伺服器的 HTTP 連線。

HTTP 請求

一個 HTTP 請求包含三個部分:

Method-URI-Protocol/Version方法-地址-版本

Request header請求頭

Entity body請求實體

下面是一個 HTTP 請求例項:

POST /servlet/default.jsp HTTP/1.1

Accept: text/plain; text/html

Accept-Language: en-gb

Connection: Keep-Alive

Host: localhost

User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)

Content-Length: 33

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

LastName=Franks&FirstName=Michael

The Method-URI-Protocol/Version 在這個請求的第一行:

POST /servlet/default.jsp HTTP/1.1

其中 POST 是請求的型別。每個客戶端 HTTP 請求可以是 HTTP 規範中指定的許多請求型別中的一種。HTTP 1.1 支援七種型別的請求,它們是 GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE。其中 GET 與 POST 是 Internet 應用中經常用到的二種請求型別。

URI 完整地指定了 Internet 資源。一個 URI 通常被解析為相對伺服器的根目錄。這樣,它應該總是以一個 '/' 字首開始。一個 URL 實際上是 URI 的一種型別。

Version 指的是該 HTTP 請求所用到的 HTTP 協議版本。

請求頭包含了客戶端環境與請求實體的一些有用的資訊。例如它包含瀏覽器設定的語言、實體的長度等等。每條請求頭用回車換行符(CRLF)分開。

一個非常重要的空行分開了請求頭與實體,它標誌著實體內容的開始。一些 Internet 開發書籍認為這個 CRLF 空行是 HTTP 請求的第四個部分。

在上面的 HTTP 請求中,實體只是簡單以下的一行:

LastName=Franks&FirstName=Michael

在一個典型的 HTTP 請求中,請求實體內容會長得多。

HTTP 響應

與請求相似,HTTP 響應也由三部分組成:

Protocol-Status code-Description協議狀態 描述程式碼

Response headers響應頭

Entity body響應實體

以下是一個 HTTP 響應的例項:

HTTP/1.1 200 OK

Server: Microsoft-IIS/4.0

Date: Mon, 3 Jan 1998 13:13:33 GMT

Content-Type: text/html

Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT

Content-Length: 112

<html>

<head>

<title>HTTP Response Example</title></head><body>

Welcome to Brainy Software

</body>

</html>

響應頭的第一行類似請求頭的第一行,告訴你所用的協議是 HTTP 1.1 ,請求成功(200=success),以及沒有任何問題。

響應頭類似請求頭也包含了一些有用的資訊。響應的實體響應本身的 HTML 內容。頭與實體之間由回車換行的空行(CRLF)分開。

Socket 類

一個 socket 是一個網路連線的端點,它使得一個應用可以從網路讀與寫。在不同電腦上的二個應用軟體能夠通過收發位元組流而彼此通訊。要發一個資訊到另一個應用程式,你需要知道它的IP地址,以及它的 socket 埠號。在 Java 中,一個 socket 用 java.net.Socket 來實現。

要建立一個 socket ,你可以用 Socket 類中幾個構建方法中的一個。其中一個接受主機名與埠號作為引數:

new Socket("yahoo.com", 80);

一旦你成功地建立了一個 Socket 類的例項,你就可以用它去傳送與接收位元組流了。要傳送位元組流,你需要呼叫 Socket 類的 getOutputStream 方法來得到一個 java.io.OutputSteam 物件。要傳送文字到遠端的程式,你通常需要從返回的 OutputStream 建立一個 java.io.PrintWriter 物件。要從連線的另一端接收位元組流,你需要呼叫 Socket 類的 getInputStream 方法,它返回一個 java.io.InputStream 物件。

以下程式碼建立一個可以與本地 HTTP 伺服器通訊的 socket (127.0.0.1 表示一個本地的主機),傳送一個 HTTP 請求,並接收從伺服器的響應。它還建立一個 StringBuffer 物件來接受響應,並列印到控制檯。

Socket socket= new Socket("127.0.0.1", "8080");

OutputStream os= socket.getOutputStream();

boolean autoflush = true;

PrintWriter out= new PrintWriter( socket.getOutputStream(), autoflush );

BufferedReader in = new BufferedReader(

new InputStreamReader( socket.getInputStream() ));

// send an HTTP request to the web server

out.println("GET /index.jsp HTTP/1.1");

out.println("Host: localhost:8080");

out.println("Connection: Close");

out.println();

// read the response

boolean loop= true;

StringBuffer sb = new StringBuffer(8096);

while (loop) {

if ( in.ready() ) {

int i=0;

while (i!=-1) {

i = in.read();

sb.append((char) i);

}

loop = false;

}

Thread.currentThread().sleep(50);

}

// display the response to the out console

System.out.println(sb.toString());

socket.close();

注意要從 web 伺服器得到正確的響應,你必須要傳送用 HTTP 協議編譯了的 HTTP 請求。如果你看了上面的 HTTP 部分,你應該能夠理解上面程式碼中的 HTTP 請求。

黑客首選--Web 2.0應用程式

日前,全球網際網路內容安全領導者趨勢科技(東京證交所代號:4704)釋出了趨勢科技實驗室整理分析的“08 年病毒威脅摘要暨-09年病毒趨勢預測”。根據這份研究報告指出,2008年亞洲地區的網路罪犯紛紛使用新媒介或針對舊媒介進行改良,用以謀取利益,並且以大規模的網頁入侵、AUTORUN 惡意軟體、社交詐騙手法與區域性病毒威脅為主要四大型別網路犯罪。進入2009年,值得注意的是:由於Web2.0社交網站的使用率大增,然而網站設計的安全弱點加上Web2.0使用者的認知不足,因此,這類網站將成為 Web威脅繁衍的沃土。同時,2009年還需特別留意的還有瀏覽器與其他Web 應用程式,它們將成為黑客攻擊的首要目標!

趨勢科技的產品技術顧問徐學龍指出:“2008年,鎖定特定使用者群與熱門網站為目標的病毒攻擊手法相當猖獗。在5月份,包括娛樂、政治、購物網、社交網路等各種性質的網站達到病毒入侵的最高峰,全球許多網站被植入了惡意程式碼,藉此感染不知情的網民。該趨勢似乎正以令人無法想象的速度持續發展,相當令人憂心。”

據趨勢科技2008年度資料安全分析報告指出:去年感染比例最高的是以利用USB移動儲存裝置作為傳播媒介的AUTORUN惡意軟體,在亞洲區即高達15%的感染比例,而在歐洲、中東及非洲 (EMEA) 地區感染數最高的惡意軟體當中也出現其身影,甚至還成功滲透NASA與美國國防部網路。由於企業內部USB移動儲存裝置不易控管,造成竊取私密資料越來越方便,隨之興起了盜賣個人資料的地下經濟。而Web威脅結合USB、Email整合而成的混合式攻擊,也使得處理病毒問題日趨複雜,企業MIS人員很難找出造成問題的惡意軟體檔案,致使企業生產力降低。針對此現象,徐學龍進一步分析:“現今病毒感染途徑範圍越來越大,光靠單一防護措施已經越來越難以防止,若是沒做好環節中的其中一項,將導致企業內部使用者感染病毒的頻率上升。”

另外報告中提到,在過去一年中黑客擅於利用網民所關心的事件,如四川地震、北京奧運等作為套誘餌製作惡意軟體向網民連番攻擊,而針對特定地區的獨特背景所設計的不同攻擊事件也依然層出不窮。舉例來說,08年2 月份,中國線上遊戲平臺聯眾網站遭惡意軟體作者利用安全弱點設下陷阱等待玩家上鉤。另外,持續興風作浪的網路釣魚詐騙郵件,在08年則鎖定Yahoo! Japan拍賣網站使用者為攻擊目標,使他們面臨帳戶資訊遭竊的風險。

Web 2.0的安全風險及對策

在企業IT世界中,安全風險隨處可遇,例如不夠強壯的密碼,意料之外的電子郵件附件,瀏覽網頁時誤點了惡意網址,還有不請自來的流氓軟體。諸如防火牆、防毒軟體等安全工具基本可以處理這些安全威脅。不過,隨著Web 2.0應用逐漸增多,企業IT部門又迎來了新的安全威脅,傳統的安全工具在面對Web 2.0應用時往往顯得心有餘而力不足,那麼企業IT部門應該如何應對Web 2.0應用所帶來的安全威脅呢?

Web 2.0應用安全風險加劇

隨著網際網路和Web 2.0應用的日益普及,無論是個人使用者,還是企業使用者,都將面臨著巨大的安全威脅。

安全公司Sophos曾經表示,每天有15000多個新網頁將被感染,90%的Web威脅位於合法的黑客站點上,同時在全部搜尋結果中有1%包含被感染的網頁。

其中,對於多數IT經理或資訊保安管理者來說,社交網站所帶來的安全威脅日漸增大。黑客們已經把目光轉向了眾多知名社交網站。

在過去一年中,著名社交網站Facebook使用者已經屢次遭到了多種蠕蟲病毒的襲擊。惡意分子首先獲得某Facebook使用者帳戶,然後向其好友傳送一條訊息,告訴他們點選這個連結觀看來自谷歌Picasa的相片或者是一段視訊。缺乏防範意識的使用者點選連結後,會被提示下載一個視訊控制元件,但這實際上是一個傳播木馬病毒的惡意程式。

去年8月份,Facebook的1800多名使用者的資訊遭到祕密安裝的木馬程式竄改。

而微部落格Twitter也同樣成為網路罪犯散播惡意軟體和商業廣告訊息的工具。最近Twitter使用者就遭遇到了釣魚攻擊,黑客首先用偽冒網站騙取使用者的賬號和密碼,然後向被攻擊使用者的好友傳送銷售訊息或利用Twitter特有的縮址服務,欺騙網友進入第三方網站。

除了社交網站之外,其它很多Web 2.0應用同樣深受使用者喜歡,因為它們非常易用和實用,使用者一般主動去安裝這些工具,但是同時它們也將其固有的風險引入到了企業此前非常牢固的網路架構之內,讓企業資料面臨著安全風險。

Web 2.0應用安全防護的難點

對於IT經理來說,防護Web 2.0應用所帶來的安全風險是一件非常麻煩的事情,因為這些安全威脅的特點已經與傳統的安全威脅有了很大區別。

在過去,可以在網路入口處保護網路終端,但是現在,Web內容逐漸趨於動態化,使用者需要持續不斷的更新現有內容、共享應用程式,並通過多種渠道進行即時通訊。

很多Web 2.0應用都對演算法進行了優化,以確保不被阻擋,另外,這些應用還可以將自己偽裝成HTTP、FTP、SMTP和Telnet通訊,來繞開防火牆和目前統一威脅管理系統的探測。

另外,企業IT人員無法採取一刀切的形式,禁止員工使用所有Web 2.0應用,這是不現實的。因為這樣做只會阻擾員工,切斷本應通過這些應用得到的具有潛在價值的商機。

如何應對Web 2.0應用安全風險

企業IT人員需要根據當今世界的Web2.0調整自己的安全策略,為社交網站、部落格和所有其他型別的網站建立規則,同時藉助於新的安全工具來檢測和遮蔽惡意Web 2.0應用。

為了避免Web 2.0應用導致企業資料面臨威脅,企業安全人員應對企業內部的核心資料進行分門別類,並通過高質量的加密保證非常有價值的資料不被攔截和非授權使用者利用。

另外,加強企業內部員工的安全意識教育,通過不斷強化員工的風險意識,實際操作培訓等使員工自覺遵守相關的策略,幫助企業避免核心資料從內部洩露。

除了加強安全策略和提高員工安全意識外,市場也在呼喚新的技術來加強對Web 2.0應用的管理和防護。

美國FaceTime Communications公司最近推出了名為ACE的新探測分類技術,“ACE”是應用程式控制引擎(Application Control Engine)的首字母縮寫。這種專利安全技術可以掃描網路,識別1400多個Web 2.0應用和5萬多個社交網路外掛。

掃描網路上的惡意應用程式對IT人士來說或許不是一件新鮮的事情,但是FaceTime的ACE技術關注於掃描Web 2.0應用,這就頗具新意了。

通過FaceTime的ACE,這1400多個Web應用可以被識別,同時更多的社交網路外掛也可以被單獨認出。不管這些應用使用什麼埠、協議或逃避技術,ACE都可以發現並關閉它們。

另外,ACE軟體開發工具可以讓第三方解決方案提供商進行擴充套件開發,可以幫助它們的客戶管理即時通訊、端對端檔案共享、社交網路、Web 2.0、VOIP等方面的應用。