web-dev-qa-db-ja.com

HTTPエラー405.0-IIS Expressで許可されていないメソッド

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ハンドラなど)を選択すると、GETHEADPOST、およびDEBUGでのみ機能する場合、誰かが hilarious だと思ったことがわかります。動詞:

enter image description here

hTTPサーバーでHTTPのサポートを正しく実装するのではなく。

問題は:

  • なぜ exactly うまくいかないのですか
  • 正確にそれを修正する方法
  • IIS Express で修正する方法(管理ツールなし)
  • なぜ年々出荷され続け、壊れている

質問1.なぜ機能しないのですか?

最初の質問は、なぜそれが機能しないのかです。基本的なStaticファイルハンドラー以外のすべてのハンドラーを削除したIISサーバーを見てみましょう。

enter image description here

ハンドラーはすべての all 動詞に構成されます。

enter image description here

残っている唯一のハンドラは、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

質問2.それを修正するには?

一般的な知恵は、WebDAVを削除することです。 WebDAVとは何か、それがどのように問題であるのか、なぜそれが問題であるのか、あるいはWebDAVが問題を引き起こすだけの場合に存在するのかは誰も知りません。 WebDAVは、IIS管理ユーザーインターフェイスからハンドラーとして削除できます。

enter image description here

これはと同じですweb.configremoveセクションから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番目の質問に答えることができます。

質問3. IIS Expressで修正する方法

Visual Studio 2013以降1、Visual StudioはCassiniと呼ばれるミニWebサーバーを使用しなくなりました。 IIS Express自体のポータブルインストールを使用します(つまり、IIS Express Windows機能をインストールする必要はありません)。

上記の修正のほとんどは、IISで(試行)(失敗)します。しかし、Visual Studio 2013のIIS Expressでは、誰もそれらに対処していません(これがこの質問が他の質問とどのように異なるかです)。

質問4.なぜこれが起こり続けるのですか?

15年以上が経過しましたが、これは依然として起こり続けています。 good IISがWebサーバーとして機能しない理由が存在する必要があります。しかし、それは何ですか? IISチームが正しく機能しない理由を説明するナレッジベースの記事やブログ投稿を見つけることができませんでした。

ボーナスリーディング

研究努力

13
Ian Boyd

WebDAVの削除については多くの話があり、それで問題が解決します。ただし、WebDAVとは何か、およびWebDAVが何に使用されるのか疑問に思っている場合は、このページを確認してください。

https://www.cloudwards.net/what-is-webdav/

0
JTech