首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

IIS HTTP 405 錯誤排查:POST/PUT/DELETE 動詞未授權

     編輯:程式設計綜合問答

現象:登錄頁面正常(GET),提交登錄表單(POST)報 `HTTP 405.0 - Method Not Allowed`。

根本原因

IIS 默認**僅允許 GET/HEAD** 通過靜態文件處理程序。動態處理程序(ASP.NET、PHP、Python)需顯式註冊所需 HTTP 動詞。

三種修復方案

方案一:web.config 允許動詞 (ASP.NET Core / Classic)

<system.webServer>
  <handlers>
    <!-- 移除限制性繼承處理程序 -->
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <!-- 重新添加支援所有動詞 -->
    <add name="ExtensionlessUrlHandler-Integrated-4.0" 
         path="*." verb="GET,HEAD,POST,PUT,DELETE,PATCH,OPTIONS" 
         type="System.Web.Handlers.TransferRequestHandler" 
         preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
  
  <!-- ASP.NET Core 還需確保模塊啟用 -->
  <modules>
    <remove name="WebDAVModule" /> <!-- WebDAV 會攔截 PUT/DELETE -->
  </modules>
</system.webServer>

方案二:IIS 管理器圖形化配置

  1. 選中站點 → **Handler Mappings** → 找到 `ExtensionlessUrlHandler-Integrated-4.0` → **Edit** → **Request Restrictions** → **Verbs** → 勾選 `All verbs` 或輸入 `GET,HEAD,POST,PUT,DELETE`。
  2. **Modules** → 移除 `WebDAVModule`(若不需要 WebDAV)。

方案三:應用代碼層面繞過 (不推薦)

// 全部改為 GET 帶參數(不安全、不RESTful、有長度限制)
// form method="get" action="/login?username=...&password=..."

驗證步驟

  1. 瀏覽器 F12 Network → 登錄請求 → 查看 **Request Method: POST** / **Status: 200**。
  2. 命令行測試:`curl -X POST https://localhost/login -d "user=admin&pass=123"` 返回非 405。
  3. IIS 日志:`%SystemDrive%\inetpub\logs\LogFiles\W3SVC1\` 確認 `sc-status=200`。

擴展:WebDAV 衝突詳解

WebDAVModule 預設處理 `PUT`/`DELETE`/`PROPFIND` 等動詞,優先級高於 ASP.NET 模塊。若站點不需要 WebDAV 協議,**必須移除該模塊**,否則 405 持續出現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved