Visual Studio 2013でローカルIIS Express Webサイトに完全に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
)へのリクエストです。 static リソースに再試行した場合:
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
でのみ機能する場合、誰かが hilarious だと思ったことがわかります。動詞:
hTTPサーバーでHTTPのサポートを正しく実装するのではなく。
問題は:
最初の質問は、なぜそれが機能しないのかです。基本的なStaticファイルハンドラー以外のすべてのハンドラーを削除したIISサーバーを見てみましょう。
ハンドラーはすべての all 動詞に構成されます。
残っている唯一のハンドラは、any動詞を許可するように設定されています。しかし、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
一般的な知恵は、WebDAVを削除することです。 WebDAVとは何か、それがどのように問題であるのか、なぜそれが問題であるのか、あるいはWebDAVが問題を引き起こすだけの場合に存在するのかは誰も知りません。 WebDAVは、IIS管理ユーザーインターフェイスからハンドラーとして削除できます。
これはと同じですweb.config
のremove
セクションからhandlers
エントリを追加するのと同じです(UI自体がweb.configにエントリを追加します)。
<system.webServer>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
これが機能しないことを除いて。それでは、どのように fix それを修正しますか?
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
したがって、問題の解決方法がわかれば、2番目の質問に答えることができます。
Visual Studio 2013以降1、Visual StudioはCassiniと呼ばれるミニWebサーバーを使用しなくなりました。 IIS Express自体のポータブルインストールを使用します(つまり、IIS Express Windows機能をインストールする必要はありません)。
上記の修正のほとんどは、IISで(試行)(失敗)します。しかし、Visual Studio 2013のIIS Expressでは、誰もそれらに対処していません(これがこの質問が他の質問とどのように異なるかです)。
15年以上が経過しましたが、これは依然として起こり続けています。 good IISがWebサーバーとして機能しない理由が存在する必要があります。しかし、それは何ですか? IISチームが正しく機能しない理由を説明するナレッジベースの記事やブログ投稿を見つけることができませんでした。
WebDAVの削除については多くの話があり、それで問題が解決します。ただし、WebDAVとは何か、およびWebDAVが何に使用されるのか疑問に思っている場合は、このページを確認してください。