我在PHP(5.2.9-1)应用程序中有一个表单导致IIS(Microsoft-IIS/6.0)在POST时抛出以下错误:
无法显示您要查找的页面,因为使用了无效的方法(HTTP谓词)来尝试访问.
这是一个HTTP 405状态代码.应用程序中的所有其他表单都有效,因此我认为PHP页面的IIS'动词'设置是正确的.
这是客户的服务器,我无权访问以验证设置或测试代码.我所能做的就是发送客户替换文件.IIS服务器上的其他客户没有此类问题.
表格非常简单:
<form method="post" action="index.php">
... fields ...
</form>
Run Code Online (Sandbox Code Playgroud)
什么可以导致IIS仅在一个表单上抛出该错误,但在其他表单上工作正常?
在Visual Studio 2013下向本地IIS Express网站发出完美的动词时:
CROMULENT http://localhost:7579/Handler.ashx HTTP/1.1
Host: localhost:7579
Run Code Online (Sandbox Code Playgroud)
服务器响应错误:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
Run Code Online (Sandbox Code Playgroud)
这是对"通用处理程序" (即.ashx)的请求.如果我再次尝试静态资源:
SCHWIFTY http://localhost:7579/Default.htm HTTP/1.1
Host: localhost:7579
Run Code Online (Sandbox Code Playgroud)
服务器响应错误:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
Run Code Online (Sandbox Code Playgroud)
这是尝试使用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
Run Code Online (Sandbox Code Playgroud)
这个问题有时被我要求死亡.但没有人提出过解决方案.
微软的Bug
从根本上说,问题在于Microsoft默认情况下会破坏IIS和IISExpress.他们不需要像处理Web服务器那样处理HTTP谓词,而是处理动词.
在管理在Windows Server上运行的完整IIS时,最容易看到这一点.挑选任何内置的处理程序(例如CSHTML处理程序)的,你可以看到,有人认为这将是 …