gpt4 book ai didi

iis - HTTP 错误 405.0 - IIS Express 中不允许的方法

转载 作者:行者123 更新时间:2023-12-02 21:54:09 30 4
gpt4 key购买 nike

在 Visual Studio 2013 下向本地 IIS Express 网站发出完美的 cromulent 动词时:

CROMULENT http://localhost:7579/Handler.ashx HTTP/1.1
Host: localhost:7579

服务器响应错误:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE

这是对“通用处理程序”(即 .ashx )的请求。如果我再次尝试静态资源:
SCHWIFTY http://localhost:7579/Default.htm HTTP/1.1
Host: localhost:7579

服务器响应错误:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE

这完全是为了尝试使用 HTTP 动词:
DELETE http://localhost:7579/Handler.ashx HTTP/1.1
Host: localhost:7579

HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE

PUThttp://localhost:7579/Handler.ashx HTTP/1.1
Host: localhost:7579

HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE

这个问题有时被我问到死。但从来没有人想出解决办法。



微软的错误

从根本上说,问题在于 Microsoft 提供的 IIS 和 IISExpress 在默认情况下已损坏。他们不处理动词,而不是像 Web 服务器那样处理 HTTP 动词。

在管理 Windows Server 上运行的完整 IIS 时,最容易看到这一点。选择任何内置处理程序(例如 cshtml 处理程序),你会看到有人认为如果它只适用于 GET 会很有趣。 , HEAD , POST , 和 DEBUG动词:

enter image description here

而不是在 HTTP 服务器中正确实现对 HTTP 的支持。

问题变成了:
  • 为什么正好不行吗
  • 怎么样正好修复它
  • 如何在 中修复它IIS Express (不带任何管理工具)
  • 为什么继续出货,年复一年,断了

  • 问题 1. 为什么它不起作用?

    第一个问题是为什么它不起作用。让我们看看一个 IIS 服务器,我们已经删除了除基本的 之外的所有处理程序。静态 文件处理程序:

    enter image description here

    处理程序配置为所有动词:

    enter image description here

    剩下的唯一处理程序设置为允许 任何 动词。但是,如果我们向 Web 服务器发出请求,则会收到错误消息:
    DELETE http://scratch.avatopia.com/ HTTP/1.1
    Host: scratch.avatopia.com

    HTTP/1.1 405 Method Not Allowed
    Allow: GET, HEAD, OPTIONS, TRACE
    Server: Microsoft-IIS/7.5

    Why is this happening?



    为什么不起作用?哪里是配置选项说:
  • GET
  • HEAD
  • OPTIONS
  • TRACE

  • 因为服务器本身说这些是唯一支持的动词。

    但是如果我们把它改成 GET它工作正常:
    GET http://scratch.avatopia.com/ HTTP/1.1
    User-Agent: Fiddler
    Host: scratch.avatopia.com

    HTTP/1.1 200 OK
    Content-Type: text/html

    问题 2. 如何解决?

    常识是删除 WebDAV .没有人知道 WebDAV 是什么,它怎么会是一个问题,为什么会出现问题,或者如果它只会引起问题,它为什么会存在。 WebDAV 可以作为处理程序从 IIS 管理用户界面中删除:

    enter image description here

    这是 相同 添加一个 remove条目来自 handlers web.config 中的部分(UI 本身会为您添加 web.config 条目):
    <system.webServer>
    <handlers>
    <remove name="WebDAV" />
    </handlers>
    </system.webServer>

    除了这不起作用。那么我们该如何修复呢?

    从 IIS 开始,WebDAV 似乎变得更像是一种病毒。而不是简单地将其禁用为处理程序, you have to completely install or remove it as a module :
    <system.webServer>
    <modules>
    <remove name="WebDAVModule" />
    </modules>
    <handlers>
    <remove name="WebDAV" />
    </handlers>
    </system.webServer>

    这听起来像是一个原因,除了在我的测试用例中,在 IIS 7.5 上,WebDAV 既未安装,又作为模块删除:
    HTTP/1.1 405 Method Not Allowed
    Allow: GET, HEAD, OPTIONS, TRACE
    Server: Microsoft-IIS/7.5
    X-Powered-By: ASP.NET
    Date: Tue, 10 May 2016 19:19:42 GMT
    Content-Length: 0

    所以,如果我们能弄清楚如何解决这个问题,我们就可以回答第二个问题。

    问题 3. 如何在 IIS Express 中修复它

    从 Visual Studio 20131 开始,Visual Studio 不再使用名为 Cassini 的迷你 Web 服务器。它使用 IIS Express 本身的可移植安装(即不需要安装 IIS Express Windows 功能)。

    大多数上述修复(尝试)(失败)在 IIS 中。但是没有人在 Visual Studio 2013 的 IIS Express 中处理过它们(这就是这个问题与其他问题的不同之处)。

    问题 4. 为什么这种情况一直发生?

    15 年过去了,这种情况仍在发生。 IIS 不能作为 Web 服务器运行,这肯定是有充分理由的。但它是什么?我找不到任何知识库文章或博客文章来解释 IIS 团队拒绝正常运行的原因。

    奖励阅读
  • 此问题最流行的 Stackoverflow 问题:ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8

  • 研究工作
  • HTTP Error 405.0 - Method Not Allowed, with POST (没有回答,php)
  • HTTP Error 405.0 - Method Not Allowed (无人接听)
  • POST verb not allowed (php)
  • HTTP Error 405.0 - Method Not Allowed in ASP.net MVC5 (没有回答,mvc)
  • JQuery File Uploader = error 405 IIS8.5 (jquery 无应答)
  • IIS 7.5 405 Method Not Allowed for PUT from StaticFileModule (无应答,静态模块,iis)
  • The HTTP verb POST used to access path is not allowed (“不要使用动词”)
  • http error 405 method not allowed error with web.API (卸载 WebDAV;已经不是)
  • Handling Perl IIS 7.5 (perl)
  • HTTP Error 405.0 - Method Not Allowed using Jquery ajax get (ajax)
  • What causes an HTTP 405 "invalid method (HTTP verb)" error when POSTing a form to PHP on IIS? (iis6, ftp, php)
  • http://forums.asp.net/t/1648594.aspx (“你试过ping你的电脑了吗”)
  • Angular $resource POST/PUT to WebAPI 405 Method Not Allowed (尝试删除 WebDAV 处理程序和 WebDAV 模块)
  • Http Error 405.0 - method not allowed iis 7.5 module staticfilemodule (无解)
  • Unable to set up WebDAV with IIS 7 *(尝试设置 webdav)*
  • Android SOAP request is returning HTTP Response 405 (无解)
  • wcf service doesn't allow POST (wcf)
  • WebAPI Delete not working - 405 Method Not Allowed (WebAPI;删除 WebDAV)
  • 最佳答案

    我似乎对这个问题有点沮丧,所以实际问题有点不清楚。您正在尝试但失败的具体内容是什么?你对答案有什么期待?

    无论如何,基于这个问题的评论:

    This is all by way to trying to use HTTP verbs:



    以及涉及通用处理程序的相应示例,我将尝试展示使 PUT 成为可能所需的内容。和 DELETE通用处理程序。

    为了让 PUTDELETE在通用处理程序上,您必须在 web.config 中允许它的应用程序。为此,您应该为 *.ashx 注册一个处理程序。如下:
    <system.webServer>
    <handlers>
    <add name="SimpleHandlerFactory-Integrated-WithPutDelete"
    path="*.ashx"
    verb="GET,HEAD,POST,DEBUG,PUT,DELETE"
    type="System.Web.UI.SimpleHandlerFactory"
    resourceType="Unspecified"
    requireAccess="Script"
    preCondition="integratedMode" />
    </handlers>
    </system.webServer>

    根据您最初设置网站/应用程序的方式,可能有也可能没有为 type="System.Web.UI.SimpleHandlerFactory" 注册的处理程序。在您的 web.config文件。如果有,您应该能够修改该条目并添加您想要允许的动词。

    你会注意到这个条目有 preCondition="integratedMode" .我相信,在使用 IIS Express 在 Visual Studio 中进行调试时,这应该可以工作。在实际的 IIS 部署中,可能需要修改处理程序注册以匹配将运行应用程序的应用程序池。对于以经典模式(未集成)运行的应用程序,它看起来像这样(未测试,因此可能是错误的):
    <system.webServer>
    <handlers>
    <add name="SimpleHandlerFactory-ISAPI-4.0_64bit-WithPutDelete"
    path="*.ashx"
    verb="GET,HEAD,POST,DEBUG,PUT,DELETE"
    modules="IsapiModule"
    scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll"
    preCondition="classicMode,runtimeVersionv4.0,bitness64"
    responseBufferLimit="0" />
    </handlers>
    </system.webServer>

    确切的细节将取决于框架版本和应用程序池的位。

    如果您使用 IIS Express 在 Visual Studio 中进行调试,您应该查看 applicationhost.config它设置了许多关于 IIS Express 的默认值。它位于:
    My Documents\IISExpress\config

    上面经典管道应用程序池的未经测试的处理程序注册是对该文件中的处理程序注册的轻微修改。在我的环境中有 *.ashx 的 6 个单独条目,具有不同的先决条件,在该文件中。

    在您的 web.config 中明确删除所有这些可能是个好主意。如果您想拥有自己的注册,允许 PUTDELETE .并非所有这些都实际上同时处于事件状态/注册,因为前提条件(我想)是相互排斥的,但至少对我来说,将它们一个接一个地全部删除是可行的。在我的环境中,带有删除的部分如下所示:
    <remove name="SimpleHandlerFactory-ISAPI-4.0_64bit"/>
    <remove name="SimpleHandlerFactory-ISAPI-4.0_32bit"/>
    <remove name="SimpleHandlerFactory-Integrated-4.0"/>
    <remove name="SimpleHandlerFactory-Integrated"/>
    <remove name="SimpleHandlerFactory-ISAPI-2.0"/>
    <remove name="SimpleHandlerFactory-ISAPI-2.0-64"/>

    希望这至少能照亮黑暗的地方!

    关于iis - HTTP 错误 405.0 - IIS Express 中不允许的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37147406/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com