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.
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
:
plutôt que d'implémenter correctement la prise en charge de HTTP dans un serveur HTTP.
La question devient:
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 :
Le gestionnaire est configuré pour tous les verbes all:
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
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:
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.
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).
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.
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: