Web開發中充斥了太多的技術名詞,本文整理了一下,介紹各個技術適合做什麼。內容主要是:
- 前臺: HTML(XHTML,CSS),JavaScript( jQuery, AJAX, JSON)
- 後臺: CGI, ASP,JSP, PHP
需要說的是W3school是一個很好的學習Web技術的網站http://www.w3school.com.cn/)本文內容主要來自該網站
1 HTML
超文本標籤語言,用來寫頁面。下面的html代碼顯示一段文字:
<html>
<body>
<h1> Heading</h1>
<p>This is a paragraph.</p>
</body>
</html>
2 XHTML
XHTML 可擴展超文本標記語言,是作爲一種 XML 應用被重新定義的更嚴謹更純淨的 HTML,是HTML 版本,目標是取代HTML。
3 HTML5
HTML5是下一代的HTML,它將成爲 HTML、XHTML 以及 HTML DOM 的新標準,仍處於完善之中。然而,大部分現代瀏覽器已經具備了某些 HTML5 支持。
HTML5提供了諸多新特性:
- HTML5 提供了展示視頻的標準
- 新的表單控件,比如 calendar、date、time、email、url、search
- 更好本地離線存儲支持,提供兩種在客戶端存儲數據的新方法:沒有時間限制的數據存儲和針對Session的數據存儲,HTML5還可以創建離線緩存,供離線瀏覽
- 允許網頁自動獲得來自服務器的更新,這一點很重要,在此之前這需要網頁不斷髮送請求來實現。HTML5中通過服務器發送事件,更新能夠自動到達,使用的例子包括網頁聊天應用,火車票量更新,股價動態等
- 運行在後臺的 JavaScript,不會影響頁面的性能。當在 HTML 頁面中執行腳本時,頁面的狀態是不可響應的,直到腳本已完成,有了後臺的 JavaScript,用戶則可以繼續做動作
- 提供canvas 元素,可以使用 JavaScript 在網頁上繪製圖像
- 支持新的特殊內容元素,比如 article、footer、header、nav、section
4 CSS
定義如何顯示html.下面的CSS定義一個一段文字的樣式:
<head>
<style type="text/css">
.title1 {font:bold14px Arial, Helvetica, sans-serif; color: #993300;line-height:35px; letter-spacing:.2em;margin-top: 10px;
margin-bottom: 8px; border-bottom: 2px solid #bcbcbc;}
</style>
</head>
<div class="title1">新特性</div>
顯示效果如下:
5 CSS3
CSS3是最新的CSS, W3C(W3C 指 World WideWeb Consortium,萬維網聯盟)仍然在對 CSS3 規範進行開發。不過,現代瀏覽器已經實現了相當多的 CSS3 屬性。瀏覽器通常支持CSS2。
使用CSS3可以實現很多特性,如
- 很容易創建CSS2中需要技巧才能實現的圓角邊框
- 創建動畫,這可以在許多網頁中取代動畫圖片、Flash 動畫以及 JavaScript
- 實現過渡效果,即元素從一個樣式到另一個樣式的過渡,如文本從小到大
- 多列,創建多個列來對文本進行佈局,就像報紙那樣
- 重設元素尺寸,如用戶可以拖拽大小的文本框
- 2D/3D轉換,如rotate,scale, translate, matrix,skew
- 更強大的背景、文本效果,如背景重影,自動換行
6 HTTP協議
HTTP協議(HyperTextTransfer Protocol,超文本轉移協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。
HTTP是一個無連接無狀態的協議。無連接是指每次只處理一個請求,請求完成後即斷開連接,這樣可以節省傳輸時間。無狀態是指協議對於事務處理沒有記憶能力,所以後續處理需要前面的信息就需要重傳[11]。
HTTP/1.1協議定義了多種方法(“動作”)來表明Request-URI指定的資源的不同操作方式,如HEAD,GET,POST。客戶端向服務器發送一個請求,服務器以一個狀態行作爲響應,響應的內容包括:消息協議的版本、成功或者錯誤編碼、服務器信息、實體元信息以及必要的實體內容。
幾個比較重要的HTTP狀態碼:400(Badrequest), 403(Forbidden), 404(Not found),410(Gone,已不存在)。
可以通過Wireshark(一個非常棒的開源網絡包分析軟件)來抓TCP,HTTP包來分析發送過程或調試程序。
Note:HTTP與TCP/IP的關係,TPC/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。形象地比喻是 “我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議。WEB使用HTTP協議作應用層協議,以封裝HTTP 文本信息,然後使用TCP/IP做傳輸層協議將它發到網絡上。”
把IP想像成一種高速公路,它允許其它協議在上面行駛並找到到其它電腦的出口。TCP和UDP是高速公路上的“卡車”,它們攜帶的貨物就是像HTTP,文件傳輸協議FTP這樣的協議等[7]。
7 TCP/IP
TCP/IP(Transmission Control Protocol/ InternetProtocol傳輸控制協議/網際協議)是針對因特網的通信協議,定義了電子設備(比如計算機)如何連入因特網,以及數據如何在它們之間傳輸。
瀏覽器和服務器都是用該協議。瀏覽器使用TCP/IP 來訪問因特網服務器,服務器使用 TCP/IP 向瀏覽器傳回 HTML。
在 TCP/IP 中包含一系列用於處理數據通信的協議:
- TCP (傳輸控制協議) - 應用程序之間通信
- UDP (用戶數據包協議) - 應用程序之間的簡單通信
- IP (網際協議) - 計算機之間的通信
- ICMP (因特網消息控制協議) - 針對錯誤和狀態
- DHCP (動態主機配置協議) - 針對動態尋址
7.1 TCP使用固定的連接
TCP 用於應用程序之間的通信,。
當應用程序希望通過 TCP 與另一個應用程序通信時,它會發送一個通信請求。這個請求必須被送到一個確切的地址。在雙方“握手”之後,TCP 將在兩個應用程序之間建立一個全雙工 (full-duplex) 的通信。
7.2 IP 是無連接的
IP 用於計算機之間的通信,負責將每個包路由至它的目的地。
通過 IP,消息(或者其他數據)被分割爲小的獨立的包,並通過因特網在計算機之間傳送。
7.3 域名
每個計算機必須有一個 IP 地址才能夠連入因特網。數字的地址很難記憶,爲其命名的名稱就是域名,在瀏覽器中鍵入域名,會被一種 DNS 程序翻譯爲數字。在全世界,數量龐大的 DNS 服務器被連入因特網,負責將域名翻譯爲 TCP/IP 地址。
7.4 TCP/IP
TCP/IP 意味着 TCP 和 IP 在一起協同工作。
TCP 負責應用軟件(比如你的瀏覽器)和網絡軟件之間的通信。IP 負責計算機之間的通信。
TCP 負責將數據分割並裝入 IP包,然後在它們到達的時候重新組合它們。IP 負責將包發送至接收者。
8 JavaScript
JavaScript 是一種輕量級語言,被設計爲向 HTML 頁面增加交互性。Javascript可嵌入到html中,由瀏覽器解釋執行。
下面是一個生成文本的JavaScript腳本的例子:
<html>
<body>
<script type="text/javascript">document.write("HelloWorld!")</script>
</body>
</html>
9 jQuery
jQuery是一個JavaScript庫,它極大的簡化了JavaScript的編程。比如JavaScript要根據ID獲取HTML文檔的元素需要這樣寫:document.getElementById(“my_id”),使用jQuery則只需要寫成$(“#my_id”)。
10 JSON
JSON:JavaScript 對象表示法(JavaScriptObject Notation),是存儲和交換文本信息的語法。類似 XML,但更小、更快、更容易解析,語法是 JavaScript 對象表示法語法的子集,能夠用javascript eval()方法進行解析。JSON可使用 AJAX 進行傳輸。
JSON 最常見的用法之一,是從web 服務器上讀取 JSON 數據(作爲文件或作爲 HttpRequest),將 JSON 數據轉換爲 JavaScript 對象,然後在網頁中使用該數據。
11 Cookie
Cookie是網站爲了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端(瀏覽器)上的數據(通常經過加密),比較典型的例子是保存用戶狀態(如網站內不同網頁避免多次登錄),跟蹤用戶行爲(如購物車)等。
Cookie由服務器端生成,發送給客戶端(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給服務器。Cookie也跨一個域名下的多個網頁使用,但是不能跨域名。
Cookie是瀏覽器提供的一種機制,它將document 對象的cookie屬性提供給JavaScript,可由JavaScript對其進行控制。通過Cookie可以達到JavaScript中全局變量的效果。
需要注意的是瀏覽器可以禁用Cookie,,Cookie可以被用戶刪除,安全性不夠高,不同瀏覽器對Cookie的個數和大小有不同限制。
12 AJAX
AJAX (AsynchronousJavaScript and XML),是一種在無需重新加載整個網頁的情況下,能夠更新部分網頁的技術,用來創建動態性更強的網頁。主要技術仍然是javascript和xml。
由於HTTP是一種無狀態無連接協議,很難實現服務器主動更新,如股價波動、聊天這樣的應用。只
能採用網頁不斷全部刷新或局部刷新(網頁插入一個隱藏的iframe,通過iframe不斷自動刷新或輪詢服務器來更新數據)。
使用Ajax,可以發送異步的HTTP請求,並且可以只對網頁部分內容進行更新。使用AJAX的例子包括新浪微博、Google地圖、開心網等。
HTML5則提供了專用的持久連接套接字,能夠實現真正的服務器主動發數據給客戶端。
ExtJS ExtJS可以用來開發RIA也即富客戶端的AJAX應用,是一個用javascript寫的,主要用於創建前端用戶界面,是一個與後臺技術無關的前端AJAX框架。ExtJS要比開發者直接針對DOM、W3C對象模型開發UI組件輕鬆
13 CGI
CGI(CommonGateway Interface 公共網關接口),是描述符客戶端和服務器程序之間傳輸數據的一種標準,它定義了Web服務器如何向擴展應用程序發送消息,在收到擴展應用程序的信息後又如何進行處理等內容。
CGI程序運行在服務器端,負責響應客戶端發送的請求。CGI的一個目的是獨立於編程語言,因此可以用大多數語言語言來寫,如Java,,C/C++,VB,Perl(字符串處理能力強大)等。
CGI的工作原理是瀏覽器通過HTML表單或超鏈接請求指向HTML或CGI應用程序的URL。在服務器上,運行產着一個守護進程對端口進行監聽來自客戶的請求。當一個請求到來時,將創建一個子進程爲用戶的連接服務。根據請求的不同,服務器返回HTML文件或者調用相應的CGI程序處理。CGI程序處理後將結果格式化爲網絡服務器和瀏覽器能夠理解文檔(通常HTML網頁)返回給瀏覽器。
一個CGI的例子:
Html:
<form method="POST"enctype="multipart/form-data"action="../cgi-bin/Login.cgi">…</form>
CGI:用C實現一個Loin.cgi, main函數根據用戶名和密碼判斷是否登錄成功,然後跳轉到某頁面,生成的Login.exe重命名爲Login.cgi,放到服務器相應目錄。
由於每次請求都會創建一個新的進程處理,所以可能會造成服務器負載較大。
FAST-CGI是較新的標準,架構上和CGI大爲不同,是用一個駐留內存的服務進程向網站服務器提供腳本服務,速度和效率比CGI大爲提高[4]。
14 JSP
JSP(Java ServerPages),其根本是一種簡化的Servlet技術。
(Java Servlet是一種獨立於平臺和協議的服務器端的Java應用程序,可以生成動態的Web頁面。雖然servlet可以對任何類型的請求產生響應,但通常只用來擴展Web服務器的應用程序。Java Servlet技術爲這些應用程序定義了一個特定於HTTP的servlet類[5]。
Servlet與CGI 在傳統CGI中,如果有N個併發的對同一CGI程序的請求,則該CGI程序的代碼在內存中重複裝載了N次;而對於Java Servlet,處理請求的是N個線程,只需要一份Servlet類代碼。在性能優化方面,Servlet也比CGI有着更多的選擇[3]。)
JSP允許將Java代碼嵌入到HTML頁面中(通過<%...%>),後綴名.jsp。Web服務器在遇到訪問JSP網頁的請求時,首先執行其中的程序段,然後將執行結果連同JSP文件中的HTML代碼一起返回給客戶端。插入的Java程序段可以操作數據庫、重新定向網頁等,以實現建立動態網頁所需要的功能。
Note:普通的 HTML頁面只依賴於Web服務器, JSP頁面需要附加的語言引擎分析和執行程序代碼(ASP和PHP也一樣)。JSP代碼會被編譯成 Servlet並由Java虛擬機解釋執行,這種編譯操作僅在對JSP頁面的第一次請求時發生。
15 Node.js
Node 是一個服務器端JavaScript 解釋器(傳統方式是JavaScript運行在客戶端瀏覽器中),它將改變服務器應該如何工作的概念。它的目標是幫助程序員構建高度可伸縮的應用程序,編寫能夠處理數萬條同時連接到一個(只有一個)物理機的連接代碼。
在 Java和 PHP 這類語言中,每個連接都會生成一個新線程,每個線程要花費一定的資源,這也就決定了一臺機器能夠允許的最大連接數。爲了支持更多客戶,就需要增加服務器。
Node 解決這個問題的方法是:更改連接到服務器的方式。每個連接發射一個在 Node 引擎的進程中運行的事件,而不是爲每個連接生成一個新的 OS 線程(併爲其分配一些配套內存)[9]。
Node擅長的地方是處理體積小的請求以及基於事件的I/O,使用Node解決客戶端和服務器之間的快速溝通,如twitter短時間需要處理成千上萬條數據[10]。
16 參考
[1*] COMET服務器推技術,實現Web服務器“主動”向客戶端發送數據.
http://www.360doc.com/content/11/0617/16/597197_127627804.shtml
[2] CGI和ASP, PHP的關係. http://zhidao.baidu.com/question/81214621.html?qbl=relate_question_0&word=PHP%20CGI
[3] Java Servlet與Applet、CGI、JSP的比較.http://developer.51cto.com/art/200907/133695.htm
[5] JSP. http://baike.baidu.com/link?url=_4hZmFlZeOkBaGKXJmq2mzUYtWzbkobKp0TmfmNqNXj1sb5-0Tu_d6bgdvxm0snR
[6] HTTP超文本傳輸協議. http://baike.baidu.com/link?url=d96fAagW3cPa3yqV6K_se-RYQqAIhXA6Mb58OkPKGl3sjw6A90epuWmK85MuuK64DQcDoikqG7qsMkQu3EEt7a
[7*] TCP/IP、Http的區別.
http://www.cnblogs.com/renyuan/archive/2013/01/19/2867720.html
[9*] Node.js 究竟是什麼?. http://www.ibm.com/developerworks/cn/opensource/os-nodejs/
[10] 什麼是Node.js. http://www.open-open.com/bbs/view/1318473088937
[11*] HTTP 協議詳解. http://blog.csdn.net/gueter/article/details/1524447
[12*] 深入理解HTTP協議. http://www.360doc.com/content/10/0930/17/3668821_57590979.shtml
[13*] Cookie/Session機制詳解. http://blog.csdn.net/fangaoxin/article/details/6952954