2025年7月10日 星期四

[研究]ASP.NET WebForm 為何會有 WebResource.axd 和 ScriptResource.axd

[研究]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.axdScriptResource.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,避免中間人攻擊

********************************************************************************

(完)

相關

沒有留言:

張貼留言