BLOG
網站專欄 Q & A
網站技術

ASP 是什麼?Classic ASP 語法介紹、與 ASP.NET 的差別及現況

ASP(Active Server Pages)是微軟在 1996 年推出的伺服器端網頁技術,讓開發者用 VBScript 在 IIS 伺服器上動態產生 HTML;為了和後來的 ASP.NET 區分,現在通稱 Classic ASP。它的最後一個版本 ASP 3.0 發表於 2000 年,之後再無新版,但 IIS 至今仍保留 ASP 功能,台灣仍有不少企業官網與內部系統在上面運作。這篇文章整理 ASP 的運作原理、基本語法、表單與資料庫範例,並回答網站主最常問的兩個問題:ASP 和 ASP.NET 差在哪、舊 ASP 網站該怎麼辦。本文屬於《網頁程式語言》系列,總覽請見〈網頁程式設計入門〉。

ASP(Active Server Pages)示意圖:以 VBScript 撰寫、在 IIS 伺服器執行的動態網頁技術

一、ASP 是什麼?

ASP 是微軟的伺服器端腳本技術:把 <% %> 包起來的腳本嵌在 HTML 裡,由 IIS(Internet Information Services)在伺服器上執行,再把產生的 HTML 送給瀏覽器。檔案副檔名是 .asp,預設腳本語言是 VBScript,也可以改用 JScript(微軟版的 JavaScript)。

ASP 1.0 在 1996 年隨 IIS 3.0 推出,2.0 在 1997 年、3.0 在 2000 年隨 Windows 2000 與 IIS 5 發布,之後微軟把資源全部轉向 2002 年問世的 ASP.NET。也就是說,ASP 是一項 25 年沒有新版本的技術,「Classic ASP」這個稱呼就是這樣來的。它和 PHP、JSP 同屬第一代伺服器端網頁技術,三者的定位差異見第五節與〈PHP 語法介紹〉。

二、ASP 怎麼運作?IIS 與五個內建物件

ASP 是直譯式的:IIS 收到 .asp 請求時,交給 ASP 引擎逐行解譯腳本,不需要事先編譯。寫好存檔、重新整理就能看結果,這也是它當年受歡迎的原因。所有 ASP 程式都圍繞五個內建物件:

內建物件 用途 常用方法或屬性
Request讀取瀏覽器送來的資料Request.FormRequest.QueryStringRequest.Cookies
Response送資料回瀏覽器Response.WriteResponse.RedirectResponse.Cookies
Server伺服器端工具Server.CreateObject(建立 COM 元件)、Server.MapPathServer.HTMLEncode
Session單一訪客的狀態Session("userId")Session.Timeout
Application整個網站共用的狀態Application("visitCount")Application.Lock

三、ASP 基本語法範例

ASP 的語法就是 VBScript 的語法,再加上上面五個物件。VBScript 本身的特徵(不分大小寫、單引號註解、& 串接字串、End If 收尾)請見 VBScript 專文,以下只示範 ASP 特有的部分。

1. 輸出文字

ASP
<%@ Language="VBScript" CodePage="65001" %>
<%
    Response.Write("Hello, ASP!")
%>

第一行的 CodePage="65001" 指定 UTF-8,處理中文時建議一律加上。<%= 變數 %>Response.Write 的縮寫,兩者等價。

2. 變數

ASP
<%
    Dim name
    name = "王小明"
    Response.Write("Hello, " & name)
%>

3. 條件判斷

ASP
<%
    Dim age
    age = 18
    If age >= 18 Then
        Response.Write("您已成年")
    Else
        Response.Write("您尚未成年")
    End If
%>

4. 迴圈

ASP
<%
    Dim i
    For i = 1 To 5
        Response.Write("這是第 " & i & " 次迴圈<br>")
    Next
%>

5. 函數

ASP
<%
    Function SayHello(name)
        SayHello = "Hello, " & name
    End Function
    Response.Write(SayHello("Alice"))
%>

VBScript 的函數用「把值指定給函數名稱」來回傳,沒有 return 關鍵字。

6. 表單處理

ASP
<form method="post" action="<%= Request.ServerVariables("SCRIPT_NAME") %>">
    姓名:<input type="text" name="name"><br>
    <input type="submit" value="送出">
</form>
<%
    If Request.Form("name") <> "" Then
        Dim userName
        userName = Request.Form("name")
        Response.Write("您輸入的姓名是:" & Server.HTMLEncode(userName))
    End If
%>

表單送回同一頁,ASP 用 Request.Form 取值後輸出。範例多加了 Server.HTMLEncode:把使用者輸入原樣印回網頁是跨站腳本(XSS)最常見的破口,任何要輸出的外部資料都應先編碼。

四、與資料庫互動:ADODB 範例與安全提醒

ASP 透過 ADO(ActiveX Data Objects)連資料庫,早年最常搭配 Access(.mdb)與 SQL Server。以下是連 SQL Server 查詢的範例,已改成參數化查詢:

ASP
<%
    Dim conn, cmd, rs
    Set conn = Server.CreateObject("ADODB.Connection")
    conn.Open "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=YourDatabase;User ID=YourUser;Password=YourPassword;"

    Set cmd = Server.CreateObject("ADODB.Command")
    cmd.ActiveConnection = conn
    cmd.CommandText = "SELECT id, name FROM users WHERE status = ?"
    cmd.Parameters.Append cmd.CreateParameter("status", 3, 1, , 1)   ' 3 = adInteger, 1 = adParamInput

    Set rs = cmd.Execute
    If rs.EOF Then
        Response.Write("無資料")
    Else
        Do While Not rs.EOF
            Response.Write("ID:" & rs("id") & ",名字:" & Server.HTMLEncode(rs("name")) & "<br>")
            rs.MoveNext
        Loop
    End If

    rs.Close : Set rs = Nothing
    conn.Close : Set conn = Nothing
%>
舊 ASP 網站最常見的資安問題就在這一段:Request.QueryString("id") 直接串進 SQL 字串("SELECT ... WHERE id=" & id),是 SQL 注入的教科書案例。修正方式是像範例一樣用 ADODB.Command 的參數;另外連線字串不該寫在每一頁,應集中在一個 include 檔並放在網站根目錄之外。網站被植入惡意程式後,搜尋結果會出現「這個網站可能會危害您的電腦」警告,對品牌與排名的傷害遠大於修補成本。

五、ASP 與 ASP.NET 差在哪?

兩者只有名字像,底層完全不同:ASP 是直譯的 VBScript 腳本,ASP.NET 是編譯的 .NET 應用程式,以 C# 為主要語言。檔案副檔名一個是 .asp、一個是 .aspx 或 Razor 的 .cshtml;ASP 程式不能直接在 ASP.NET 執行,升級等於重寫。至於 ASP.NET 自己又分成綁 Windows 的 .NET Framework 版與跨平台的 ASP.NET Core,三者的完整對照表與版本支援時程,統一整理在〈ASP.NET 是什麼〉,本文不重複。

六、Classic ASP 的現況:還能用嗎?

能用,但是「維護模式」:微軟自 ASP 3.0 之後未再推出新版本,IIS 7 起 ASP 不再預設安裝,需要手動勾選功能,但最新的 Windows Server 仍然提供這個選項。微軟文件也曾說明 ASP 在 Windows 8 之後至少支援十年,這個承諾期已在 2022 年底前走完,目前的狀態是「隨 Windows 與 IIS 一起存在,沒有新功能,安全性修補隨作業系統發布」。

對網站主而言,這代表三個現實:

  • 主機只能是 Windows:ASP 依賴 IIS 與 COM 元件,Linux 主機跑不動,租用成本通常高於 PHP 主機。
  • 人才越來越少:新進工程師幾乎不學 Classic ASP,維護報價逐年上升,找不到人接手的風險比技術本身更大。
  • 安全依賴自己:語言本身不會再補強,SQL 注入、XSS、過時的 COM 元件都要靠程式碼層面自行防護。

七、舊 ASP 網站的三條路

  • 維持現狀並補強:系統運作正常、功能不再擴充時是合理選擇。至少做三件事:全站改參數化查詢、輸出一律 HTMLEncode、確認 IIS 與 Windows 有持續更新。
  • 改寫為 ASP.NET Core:資料庫(SQL Server)與團隊都在微軟生態時最順。ASP.NET Core 可跑 Linux,主機選擇變寬,但程式要全部重寫。
  • 改寫為 PHP 或其他語言:以官網、詢問單、內容行銷為主的中小企業常選這條路,主機普及、費用低、後續維護人選多。代價同樣是重寫,資料要從 Access 或 SQL Server 轉到 MySQL。

不論走哪條路,換網址結構時務必做好 301 轉址,否則累積多年的搜尋排名會一夕歸零;作法見〈301 與 302 轉址教學〉。

八、我們評估 ASP 舊站時的檢查點

網站改版的前置盤點裡,遇到 .asp 網址我們會先確認四件事,因為它們直接決定報價與時程:

  • 資料庫是什麼:Access .mdb 檔還是 SQL Server?前者通常只有幾萬筆資料、轉檔簡單;後者要確認版本與授權。
  • 有沒有第三方 COM 元件:上傳、寄信、產圖常用的舊元件(透過 Server.CreateObject 呼叫)在新主機上多半找不到相容版本,這些功能必須重做。
  • 網址型態:典型的 product.asp?id=123 若已有排名,新站要逐一對應 301,不能只轉首頁。
  • 是否還有客戶端 VBScript:很多 ASP 站同時在瀏覽器端用 VBScript 做表單驗證,那部分早已失效,判斷方法見〈VBScript 是什麼〉第六節。

本站(newscan.com.tw)自建站以來即以 PHP 與 MySQL 開發,沒有經歷過 ASP 遷移;上述檢查點來自替客戶做改版評估的實務,不涉及任何特定客戶的資料。

九、結論

ASP 是 1990 年代末期微軟的第一代動態網頁技術,語法簡單、和 IIS 綁定,至今仍能運作,但已 25 年沒有新版本。如果您是學習者,理解它的五個內建物件就足以看懂舊系統;如果您是網站主,重點不是 ASP 好不好,而是主機、人才與安全三項長期成本值不值得繼續付。

要學現代的微軟網頁技術,直接從 ASP.NET Core 開始;要理解伺服器端網頁技術的整體版圖,回到〈網頁程式設計入門〉。

十、常見問答 FAQ

ASP 是什麼?
ASP(Active Server Pages)是微軟 1996 年推出的伺服器端網頁技術,把 <% %> 包起來的 VBScript 腳本嵌在 HTML 裡,由 IIS 伺服器在收到請求時解譯執行,再把產生的 HTML 送給瀏覽器,檔案副檔名是 .asp。它在 2000 年的 ASP 3.0 之後再無新版本,為了和後繼的 ASP.NET 區分,現在通稱 Classic ASP。IIS 至今仍保留這項功能供安裝,所以舊網站仍能運作,但屬於維護模式。
ASP 和 ASP.NET 一樣嗎?
不一樣,兩者只有名字相承。ASP 是直譯式的 VBScript 腳本,檔案是 .asp;ASP.NET 是 2002 年推出、建立在 .NET 平台上的編譯式框架,以 C# 為主要語言,檔案是 .aspx 或 Razor 的 .cshtml。ASP 程式無法在 ASP.NET 直接執行,從 ASP 升級到 ASP.NET 等於重寫。ASP.NET 本身又分只能跑 Windows 的 .NET Framework 版與跨平台的 ASP.NET Core,三者的完整對照見本站〈ASP.NET 是什麼〉。
Classic ASP 現在還能用嗎?
能,但只建議用於維護既有系統。IIS 7 之後 ASP 不再預設安裝,需手動啟用功能,最新的 Windows Server 仍提供這個選項;微軟自 2000 年後沒有推出新版本,安全性修補隨 Windows 與 IIS 一起發布。實際限制有三項:主機必須是 Windows,租用成本高於 PHP 主機;會維護 Classic ASP 的工程師越來越少;SQL 注入、XSS 等防護要靠程式碼自己做。系統運作正常且找得到人維護時可以繼續用,但新專案不應採用。
.asp 網頁需要什麼主機?
需要 Windows 主機並啟用 IIS 的 ASP 功能,Linux 主機無法執行 .asp。若程式使用 Access 資料庫,主機要有對應的 OLE DB 驅動;用到第三方 COM 元件(上傳、寄信、產圖等)時,新主機也必須安裝相同元件,這常是搬家最卡的地方。台灣的共享虛擬主機以 Linux 與 PHP 為主,提供 Windows ASP 方案的業者較少、價格較高,搬家前務必先確認新環境能執行現有程式。
ASP 用什麼語言寫?
預設是 VBScript,也可以在頁面第一行用 <%@ Language="JScript" %> 改成 JScript,也就是微軟版的 JavaScript。絕大多數既有 ASP 網站都以 VBScript 撰寫,語法特徵是不分大小寫、用 Dim 宣告變數、用 & 串接字串、以 End If、Next、End Function 收尾。因此看懂 ASP 程式需要兩樣東西:VBScript 的基本語法,以及 ASP 的五個內建物件 Request、Response、Server、Session、Application。VBScript 本身的語法與現況見本站〈VBScript 是什麼〉。

參考來源

  1. Microsoft Learn,〈Classic ASP Not Installed by Default on IIS 7.0 and above〉,Microsoft 官方文件。
  2. Microsoft Learn,〈ASP Built-in Objects〉,Microsoft 官方文件。
  3. OWASP,〈SQL Injection Prevention Cheat Sheet〉,OWASP Cheat Sheet Series。
  4. 新視野網頁設計,〈ASP.NET 是什麼?語法介紹、ASP.NET Core 現況與 Web Forms 差別〉,本站自有內容。
  5. 新視野網頁設計,〈VBScript 是什麼?語法介紹、IE 退場後的現況與 JavaScript 替代方案〉,本站自有內容。

IIS 對 Classic ASP 的支援狀態依 2026 年 9 月查閱的微軟文件整理;第八節為本站承接網站改版評估時的實務檢查項目,不涉及特定客戶資料。

關於作者

內容揭露:本文由新視野網頁設計 SEO 團隊撰寫。文中連結的站內指南與延伸閱讀均為本站自有內容;新視野提供網頁設計與 SEO/AI SEO 服務,讀者在採用本文建議前請自行評估是否符合自身情況。文中引用的第三方研究與官方文件皆附可點擊出處,歡迎查證。

新視野網頁設計 SEO 團隊

新視野網頁設計自 2005 年起投入企業網站建置與搜尋行銷,服務範圍涵蓋 RWD 網站設計、技術 SEO、結構化資料佈署,以及 AI 搜尋時代的 AEO/GEO 內容優化。本文由新視野 SEO 團隊撰寫、審閱並持續維護更新。

服務據點:
台中(總公司)台中市南區忠明南路 758 號 21 樓 B4台北高雄
聯絡電話:
04-2260-1329
公司資訊:
關於我們公司位置線上詢價
對外平台:
FacebookLinkedIn
本站同主題內容:
ASP.NET 是什麼VBScript 是什麼PHP 語法介紹網頁程式設計入門

歡迎推廣本文,請務必連結(LINK)本文出處:新視野網頁設計公司