web-dev-qa-db-fra.com

Erreur HTTP 405.0 - Méthode non autorisée dans IIS Express

Lors de l'émission d'un verbe parfaitement cromulent vers un site Web local IIS Express sous Visual Studio 2013:

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

le serveur répond avec l'erreur:

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

Il s'agit d'une demande à un "gestionnaire générique"(c'est-à-dire .ashx). Si si je réessaye une ressource statique:

SCHWIFTY http://localhost:7579/Default.htm HTTP/1.1
Host: localhost:7579

le serveur répond avec l'erreur:

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

Tout cela en essayant d'utiliser des verbes 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

Cette question a été posée à mort, parfois par moi. Mais personne n'a jamais trouvé de solution.

</Question>

Bug de Microsoft

Le problème, fondamentalement, est que Microsoft expédie IIS et IISExpress cassés par défaut. Plutôt que de manipuler les verbes HTTP, comme un serveur Web est requis de le faire, ils ne gèrent pas les verbes.

Cela peut être vu plus facilement lors de la gestion complète IIS exécuté sur Windows Server. Choisissez l'un des gestionnaires intégrés (par exemple, le gestionnaire cshtml), et vous pouvez voir que quelqu'un pensait que ce serait - hilarant ​​si cela ne fonctionnait qu'avec les verbes GET, HEAD, POST et DEBUG:

enter image description here

plutôt que d'implémenter correctement la prise en charge de HTTP dans un serveur HTTP.

La question devient:

  • pourquoi exactement ça ne marche pas
  • comment exactement pour le réparer
  • comment le corriger dans IIS Express (sans aucun outil de gestion)
  • pourquoi il continue d'être expédié, année après année, cassé

Question 1. Pourquoi ça ne marche pas?

La première question est de savoir pourquoi cela ne fonctionne pas. Regardons un serveur IIS où nous avons supprimé tous les gestionnaires sauf le gestionnaire de fichiers de base Static :

enter image description here

Le gestionnaire est configuré pour tous les verbes all:

enter image description here

Le seul gestionnaire restant est défini pour autoriser any verb. Pourtant, si nous émettons une demande au serveur Web, nous obtenons l'erreur:

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

Pourquoi cela arrive-t-il?

Pourquoi ça n'a pas marché? Où est l'option de configuration qui dit:

  • GET
  • HEAD
  • OPTIONS
  • TRACE

parce que le serveur lui-même dit que ce sont les seuls verbes pris en charge.

Pourtant, si nous le changeons en GET cela fonctionne très bien:

GET http://scratch.avatopia.com/ HTTP/1.1
User-Agent: Fiddler
Host: scratch.avatopia.com

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

Question 2. Comment y remédier?

La sagesse courante consiste à supprimer WebDAV . Personne ne sait ce qu'est WebDAV, comment cela pourrait être un problème, pourquoi c'est un problème ou pourquoi il existe s'il ne cause que des problèmes. WebDAV peut être supprimé en tant que gestionnaire de l'interface utilisateur d'administration IIS:

enter image description here

qui est identique à l'ajout d'une entrée remove à partir de la section handlers dans web.config (l'interface utilisateur ajoute elle-même l'entrée à web.config):

<system.webServer>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>

Sauf que ça ne marche pas. Alors, comment pouvons-nous fixer cela?

En commençant par IIS il semble que WebDAV soit devenu encore plus un virus. Plutôt que de simplement le désactiver en tant que gestionnaire, vous devez l'installer ou le supprimer complètement en tant que module =:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

Cela ressemble à une idée de raison, sauf dans mon cas de test, sur IIS 7.5, WebDAV n'est pas installé et supprimé en tant que module:

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

Donc, si nous pouvons comprendre comment résoudre le problème, nous pouvons répondre à la question numéro deux.

Question 3. Comment le corriger dans IIS Express

Démarrage avec Visual Studio 20131, Visual Studio n'utilise plus de mini serveur Web appelé Cassini. Il utilise une installation portable de IIS Express lui-même (c'est-à-dire IIS La fonction Windows Express n'a pas besoin d'être installée).

La plupart des correctifs (tentatives) (échec) ci-dessus dans IIS. Mais personne ne les a traités dans IIS Express de Visual Studio 2013 (ce qui rend cette question différente des autres).

Question 4. Pourquoi cela continue-t-il de se produire?

Cela fait plus de 15 ans, et cela continue de se produire. Il doit y avoir une bonne raison pour laquelle IIS ne fonctionne pas comme un serveur Web. Mais qu'est-ce que c'est? Je n'ai pu trouver aucun article de la base de connaissances ou un article de blog expliquant pourquoi l'équipe IIS refuse de fonctionner correctement.

Lecture bonus

Effort de recherche

13
Ian Boyd

Il y a beaucoup de discussions sur la suppression de WebDAV et cela résoudra le problème - mais si vous vous demandez ce qu'est WebDAV et à quoi il sert, consultez cette page:

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

0
JTech