[研究]ASP.NET WebForm 為何會有 WebResource.axd 和 ScriptResource.axd
2025-07-10
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20
********************************************************************************
ASP.NET WebForm 為何會有 WebResource.axd 和 ScriptResource.axd 存在 ? 但又非真正存在的網頁 ?WebResource.axd 和 ScriptResource.axd 差別 ?
ChatGPT 說:
在 ASP.NET WebForm 中,WebResource.axd 和 ScriptResource.axd 是 系統自動產生的虛擬資源(Virtual Resource),它們並不是實體存在於磁碟上的檔案或網頁,而是由 ASP.NET 處理程序(Handler)在執行階段動態生成並回應請求。
一、為何會有 WebResource.axd 和 ScriptResource.axd?
這兩個 .axd 是為了讓 ASP.NET 能夠:
- 將 嵌入在 DLL(如 .NET 系統或第三方元件)中的資源檔案(例如 JavaScript、CSS、圖片等),
- 透過 URL 提供給瀏覽器下載與使用,
- 避免開發者需要手動將內嵌資源釋出為實體檔案。
二、差別在哪裡?
| 特徵 | WebResource.axd | ScriptResource.axd |
| 功能 | 傳遞 任意內嵌資源(圖片、CSS、JS 等) | 專門傳遞 AJAX Script 和 本地化 JS |
| 來源 | 任何嵌入 DLL 的資源 | ASP.NET AJAX Library(如 MicrosoftAjax.js) |
| 常見用途 | ImageButton 圖片、Validator 的 JS、CSS 等 | UpdatePanel、ScriptManager 所需的 JS |
| 用法產生方式 | 透過 Page.ClientScript.GetWebResourceUrl(...) 產生 | ScriptManager 控制項自動產生 |
| 可攜參數 | d=(資源識別碼),t=(組件)等 | 除了 d= 還有 culture=(語系)等參數 |
三、它們為什麼能運作(雖然不是真實檔案)?
這些 URL 被 web.config 中註冊的 HTTP Handler 攔截並處理:
<system.web>
<httpHandlers>
<add path="WebResource.axd" verb="GET" type="System.Web.Handlers.WebResourceHandler, System.Web" validate="true" />
<add path="ScriptResource.axd" verb="GET" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions" validate="true" />
</httpHandlers>
</system.web>
|
這些 Handler 會解析 URL 中的參數,然後從相對應的 DLL 中擷取嵌入的資源並回應給用戶端。
在 ASP.NET 2.0 以後(含 WebForms 應用程式)WebResource.axd 和 ScriptResource.axd 的 handler 預設內建於 ASP.NET runtime,不一定需要顯示在你的 Web.config 裡面。
四、是否能移除?
通常不能移除,因為 ASP.NET WebForm 的許多控制項會用到它們。如果強制禁止(例如在 web.config 移除 Handler 或 IIS 層級攔截),可能會導致以下問題:
- ImageButton 不顯示圖片
- 驗證控制項無法正常工作
- UpdatePanel/AJAX 功能異常
- 瀏覽器報錯(如 404 - Not Found 或 JavaScript 錯誤)
五、安全考量
雖然 .axd 本身是安全的,仍建議:
- 不應公開記錄這些 URL(例如記錄於 sitemap 或 robots.txt)
- 可在生產環境設定 Cache-Control / Compression,減少效能負擔
- 使用 HTTPS,避免中間人攻擊
********************************************************************************
(完)
相關
沒有留言:
張貼留言