Linux中國

Perl 與動態網站的誕生

早期互聯網歷史中,有一些膾炙人口的開創性事件:如 蒂姆·伯納斯·李 Tim Berners-Lee 在郵件組上宣布 WWW-project 的那天,該文檔隨同 CERN 發布的項目代碼進入到了公共域,以及 1993 年 1 月的第一版 NCSA Mosaic 瀏覽器。雖然這些獨立的事件是相當重要的,但是當時的技術的開發已經更為豐富,不再是由一組的孤立事件組成,而更像是一系列有內在聯繫的故事。

這其中的一個故事描述的是網站是如何變成動態的,通俗說來就是我們如何使伺服器除了提供靜態 HTML 文檔之外做更多的事。這是個流傳在新聞組和郵件列表間、計算機科學實驗室里、各個大陸之間的故事,重點不是一個人,而是一種編程語言:Perl

CGI 腳本和信息軟體

在上世紀 90 年代中後期,Perl 幾乎和動態網站是同義詞。Perl 是一種相對來說容易學習的解釋型語言,並且有強大的文本處理特性,使得它能夠很容易的編寫腳本來把一個網站關聯到資料庫、處理由用戶發送的表單數據,當然,還要創造那些上世紀 90 年代的網站的經典形象——計數器和留言簿。

類似的網站特性漸漸的變成了 CGI 腳本的形式,其全稱為 通用網關介面 Common Gateway Interface 首個實現由 Rob McCool 於 1993 年 11 月在 NCSA HTTPD 上完成。CGI 是目的是直面功能,並且在短短几年間,任何人都可以很容易的找到一些由 Perl 寫的預製的腳本存檔。有一個聲名狼籍的案例就是 Matt's Scripts Archive,這是一種流行卻包含各種安全缺陷的源代碼庫,它甚至使得 Perl 社區成員創建了一種被稱為 Not Matt『s Scripts 的更為專業的替換選擇。

在當時,無論是業餘愛好者,還是職業程序員都採用 Perl 來製作動態網站和應用,Tim O』Reilly 創造了辭彙 「信息軟體」 infoware 來描述網站和 Perl 怎樣成為變化中的計算機工業的一部分。考慮到 Yahoo!和 Amazon 帶來的創新,O『Reilly 寫道:「傳統軟體在大量的軟體中僅僅包含了少量的信息;而信息軟體則在少量的軟體中包含了大量的信息。」 Perl 是一種像瑞士軍刀一樣的完美的小而強大的工具,它支撐了信息媒體從巨大的網站目錄向早期的用戶生成內容(UGC)平台的轉變。

題外話

儘管使用 Perl 來製作 CGI 簡直是上佳之選,但是編程語言和不斷提升中的動態網站之間的關係變得更加的密切與深入。從第一個網站(在 1990 年的聖誕節前)出現到 1993 年 McCool 實現 CGI 的短暫時期內,Web 上的各種東西,比如表單、圖片以及表格,就這麼逐漸出現在上世紀 90 年代乃至後來。儘管伯納斯·李也對這些早期的歲月產生了影響,但是不同的人看到的是 Web 不同的潛在作用,並將它推向各自不同的方向。一方面,這樣的結果來自一些著名的辯論,例如 HTML 應該和 SGML 保持多近的關係是否應該實現一個圖像標籤等等。在另一方面,在沒有直接因素影響的情況下改變是極其緩慢的。後者已經很好的描述了動態網站是如何發展的。

從某種意義上說,第一個「網關」的誕生可以追溯到 1991 至 1992 年之間(LCTT 譯註:此處所謂「網關」的意義請參照 CGI 的定義),當時伯納斯·李和一些計算機科學家與超文本愛好者編寫服務程序使得一些特定的資源能夠連接到一起,例如 CERN 的內部應用程序、通用的應用程序如 Oracle 資料庫、廣域信息查詢系統(WAIS) 等等。(WAIS 是 Web 的前身,上世紀 80 年代後期開發,其中,開發者之一 Brewster Kahle,是一個數字化圖書管理員和 Internet Archive 的創始人。)可以這樣理解,「網關」就是一個被設計用來連接其它 Web、資料庫或者應用程序的定製的 Web 伺服器。任何的動態功能就意味著在不同的埠上運行另外一個守護進程(參考閱讀,例如伯納斯·李對於在網站上如何添加一個搜索功能 的描述)。伯納斯·李期望 Web 可以成為不同信息系統之間的通用介面,並且鼓勵建立單一用途服務。他也提到 Perl 是一種強大的(甚至是不可思議)、可以將各種東西組合起來的語言。

然而,另一種對「網關」的理解指出它不一定是一個定製設備,可能只是一個腳本,一個並不需要額外伺服器的低吞吐量的附加腳本。這種形式的首次出現是有爭議性的 Jim Davis 的 Gateway to the U Mich Geography server,於 1992 年的 11 月發布在了 WWW-talk 郵件列表中。Davis 的腳本是使用 Perl 編寫的,是一種 Web API 的原型,基於格式化的用戶查詢從另外的伺服器拉取數據。我們來說明一下這兩種對於網關的理解的不同之處,伯納斯·李回復了 Davis 的郵件,期望他和 Michigan 伺服器的作者「能夠達成某種共識」,「從網路的角度來看的話」僅使用一台伺服器來提供這樣的信息可能會更有意義。伯納斯·李,可能是期待著 Web 的發明者可以提出一種有秩序的信息資源訪問方式。這樣從不同伺服器上拉取數據的網關和腳本意味著一種潛在的 Web 的質的變化,雖然不斷增多,但也可能有點偏離了伯納斯·李的原始觀點

回到 Perl HTTPD

在 Davis 的地理伺服器上的網關向標準化的、低吞吐量的、通過 CGI 方式實現的腳本化網關邁進的一步中,Perl HTTPD 的出現是很重要的事件,它是 1993 年初由印地安納大學的研究生 Marc Van Heyningen 在 布盧明頓 Bloomington 完全使用 Perl 語言實現的一個 Web 伺服器程序。從 Van Heyningen 給出的設計原則來看,基於使用 Perl 就不需要任何的編譯過程這樣一種事實,使得它能夠成為一種極易擴展的伺服器程序,這個伺服器包含了「一個向代碼中增加新特性時只要簡單的重啟一下就可以,而不會有任何的宕機時間的特性」,使得這個伺服器程序可以頻繁的加入新功能。

Perl HTTPD 代表了那種伺服器程序應該是單一、特定目的的觀點。相應的,這種模式似乎暗示了在 Web 開發中像這樣漸進式的、持續測試的軟體產品可能會最終變成一種共識。Van Heyningen 在後來提到過他從頭編寫這樣一個伺服器程序的初衷是當時沒有一種簡便的方式使用 CERN 伺服器程序來生成「虛擬文檔」(例如,動態生成的頁面),他打趣說使用 Perl 這樣的「神之語言」來寫可能是最簡單的方式了。在他初期編寫的眾多腳本中有一個 Sun 操作系統的用戶手冊的 Web 界面,以及 Finger 網關(這是一種早期用來共享計算機系統信息或者是用戶信息的協議)。

雖然 Van Heyningen 將印地安納大學的伺服器主要用來連接現存的信息資源,他和研究生們同時也看見了作為個人發布形式的潛在可能。其中一件廣為人知事件是在 1993-1994 年之間圍繞著一個著名的加拿大案件而公布的一系列的文件、照片和新聞故事,與此形成鮮明對比的是,所有的全國性媒體都保持了沉默。

Perl HTTPD 沒有堅持到現在的需要。今天,Van Heyningen 回憶起這個程序的時候認為這個程序只是當時的一個原型產品。它的原始目的只是向那些已經選擇了 Gopher 作為大學的網路界面的資深教員們展示了網路的另一種利用方式。Van Heyningen 以一種基於 Web 的、可搜索的出版物索引的方式,用代碼回應了他的導師們的虛榮。就是說,在伺服器程序技術方面關鍵創新是為了贏得爭論的勝利而誕生的,在這個角度上來看代碼做到了所有要求它所做的事。

不管該伺服器程序的生命是否短暫,伴隨者 Perl HTTPD 一起出現的理念已經傳播到了各個角落。Van Heyningen 開始收到了獲取該代碼的請求,而後將它分享到了網上,並提示說,需要了解一些 Perl 就可以將它移植到其它操作系統(或者找到一個這樣的人也行)。不久之後,居住在 奧斯汀 Austin 的程序員 Tony Sanders 開發了一個被稱為 Plexus 的輕便版本。Sander 的伺服器程序是一款全功能的產品,並且同樣包含了 Perl HTTPD 所建議的易擴展性,而且添加一些新的特性如圖片解碼等。Plexus 直接影響了 Rob McCool 給 NCSA HTTPD 伺服器上的腳本開發的「htbin」,並且同樣影響到了不久之後誕生的通用網關介面(CGI)。

在這些歷史遺產之外,感謝妙不可言的 互聯網時光機 Internet Archive 使得 Perl HTTPD 在今天依然保留在一種我們依然可以獲取的形式,你可以從這裡下載 tarball

歷史展望

對於技術世界的顛覆來說,技術的改變總是在一個相互對立的過程中。現有的技術是思考新技術的基礎與起點。過時的編程形式啟迪了今天人們做事的新方式。網路世界的創新可能看起來更像是對於舊技術的擴展,不僅僅是 Perl。

在萌芽事件的簡單的時間軸之外,Web 歷史學者也許可以從 Perl 獲取更多的線索。其中一部份的挑戰在於材料的獲取。更多需要做的事情包括從可獲取的大量雜亂的數據中梳理出它的結構,將分散在郵件列表、歸檔網站,書本和雜誌中的信息內容組合在一起。還有一部分的挑戰是需要認識到 Web 的歷史不僅僅是新技術發布的日子,它同時包括了個人記憶、人類情感與社會進程等,並且這不僅僅是單一的歷史線而是有許許多多條相似的歷史線組合而成的。就如 Perl 的信條一樣「 殊途同歸。 There's More Than One Way To Do It.

(題圖來自:pinterest.com

via: https://opensource.com/life/16/11/perl-and-birth-dynamic-web

作者:Michael Stevenson 譯者:wcnnbdk1 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國