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
这个问题已经被问到死了,有时甚至是我在问。但是没有人提出解决方案。
</Question>
微软的Bug
问题根本上在于,微软默认情况下发货的IIS和IISExpress是有问题的。它们不处理HTTP动词,而Web服务器需要处理这些动词。
当管理运行在Windows Server上的完整的IIS时,可以最容易地看到这一点。选择任何内置处理程序(例如cshtml处理程序),您会发现有人认为只使用GET、HEAD、POST和DEBUG动词才能正常工作,这可能是“滑稽可笑”的。
与其在HTTP服务器中正确实现HTTP支持,不如在HTTP服务器中实现静态文件处理程序。
问题是:
- 为什么确切地它不起作用?
- 如何确切地修复它?
- 如何在IIS Express中修复它(不使用任何管理工具)?
- 为什么它在年复一年后仍然损坏并继续发货?
问题1.为什么不起作用?
第一个问题是为什么不起作用。让我们看一个IIS服务器,我们已经删除了除基本的静态文件处理程序之外的所有处理程序:
处理程序配置为所有动词:所有动词都可以使用该处理程序:
唯一剩下的处理程序设置为允许任何动词。然而,如果我们向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
为什么会发生这种情况?为什么它不起作用?哪个配置选项可以实现以下功能: - 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是什么,它为什么会成为问题,为什么存在如果只会导致问题。可以从IIS管理用户界面中将WebDAV作为处理程序移除:
这与在web.config的handlers部分添加一个“remove”条目相同(UI会为您添加该条目):<system.webServer>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
除了这个方法不起作用。那么我们该如何修复它呢?
从IIS开始,似乎WebDAV变得更像病毒了。与其仅将其禁用为处理程序,您必须完全安装或卸载它作为模块:
<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 2013开始1,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动词不允许 - IIS 8
研究工作
- HTTP错误 405.0 - 方法不允许,使用POST (没有答案,php)
- HTTP错误 405.0 - 方法不允许 (没有答案)
- 不允许使用POST动词 (php)
- ASP.net MVC5中的HTTP错误 405.0 - 方法不允许 (没有答案,mvc)
- JQuery文件上传器 = 错误405 IIS8.5 (jquery没有答案)
- IIS 7.5静态文件模块中的405方法不允许PUT (没有答案,静态模块,iis)
- 使用POST动词访问路径的HTTP动词不允许 ("不要使用动词")
- http错误405使用web.API时不允许的方法 (卸载WebDAV;已经没有了)
- 处理Perl IIS 7.5 (perl)
- 使用Jquery ajax get时的HTTP错误405.0 - 方法不允许 (ajax)
- 在IIS上向PHP POST表单时导致HTTP 405“无效方法(HTTP动词)”错误的原因是什么? (iis6,ftp,php)
- http://forums.asp.net/t/1648594.aspx ("你试过ping你的电脑了吗")
- Angular $resource POST/PUT到WebAPI 405方法不允许 (尝试删除WebDAV处理程序和WebDAV模块)
- Http错误405.0 - 方法不允许iis 7.5模块staticfilemodule (没有解决方案)
- 无法设置WebDAV与IIS 7 *(尝试设置 webdav)*
- Android SOAP请求返回HTTP响应405 (没有解决方案)
- wcf服务不允许POST (wcf)
- WebAPI删除不起作用-405方法不允许 (WebAPI; 删除WebDAV)