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

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

Classic ASP 運作示意:瀏覽器送出請求,IIS 伺服器逐行解譯 .asp 檔裡的腳本,產生 HTML 網頁後再送回瀏覽器顯示。

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

一、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.Form、Request.QueryString、Request.Cookies
Response送資料回瀏覽器Response.Write、Response.Redirect、Response.Cookies
Server伺服器端工具Server.CreateObject(建立 COM 元件)、Server.MapPath、Server.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 與 IIS 的支援期限都跟著所在 Windows 作業系統的生命週期走,沒有獨立的終止日期;目前的狀態是「隨 Windows 與 IIS 一起存在,沒有新功能,安全性修補隨作業系統發布」。

Classic ASP 現況的三個現實:主機只能用 Windows 與 IIS,會維護的工程師越來越少,語言不再更新,SQL 注入與 XSS 等防護都要靠程式碼自己補強。

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

  • 主機只能是 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.NET Core,或改寫為 PHP 等其他語言,依系統狀況與團隊選擇其中一條。

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

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

  • 資料庫是什麼:Access .mdb 檔還是 SQL Server?前者通常只有幾萬筆資料、轉檔簡單;後者要確認版本與授權。
  • 有沒有第三方 COM 元件:上傳、寄信、產圖常用的舊元件(透過 Server.CreateObject 呼叫)在新主機上多半找不到相容版本,這些功能必須重做。
  • 網址型態:典型的 product.asp?id=123 若已有排名,新站要逐一對應 301,不能只轉首頁。
  • 是否還有客戶端 VBScript:很多 ASP 站同時在瀏覽器端用 VBScript 做表單驗證,那部分早已失效,判斷方法見〈VBScript 是什麼〉第六節。
評估 ASP 舊站改版的四個檢查點:資料庫是 Access 還是 SQL Server、有沒有第三方 COM 元件、舊網址要逐一對應 301,以及瀏覽器端的 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. Microsoft Learn,〈Active Server Pages (ASP) support in Windows〉,Microsoft 官方文件,2025。
  5. 新視野網頁設計,〈ASP.NET 是什麼?語法介紹、ASP.NET Core 現況與 Web Forms 差別〉,本站自有內容。
  6. 新視野網頁設計,〈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)本文出處:新視野網頁設計公司