Что вызывает ошибку HTTP 405 "неверный метод (HTTP-глагол)" при отправке формы на PHP в IIS?

У меня есть одна форма в приложении PHP (5.2.9-1), которая заставляет IIS (Microsoft-IIS/6.0) вызывать следующую ошибку при POSTed:

Страница, которую вы ищете, не может быть отображена, потому что для попытки доступа использовался недопустимый метод (HTTP-глагол).

Это код статуса HTTP 405. Все остальные формы в приложении работают, поэтому я считаю, что настройка глаголов IIS для страниц PHP верна.

Это клиентский сервер, к которому у меня нет доступа для проверки настроек или тестирования кода. Все, что я могу сделать, это отправить файлы замены клиента. Другие клиенты на серверах IIS не имеют такой проблемы.

Форма проста:

<form method="post" action="index.php">
    ... fields ... 
</form>

Что может заставить IIS выбрасывать эту ошибку только для одной формы, но отлично работать с другими?

Ответ 1

Мне удалось получить FTP-доступ к серверу клиентов и так удалось выявить проблему.

После того, как форма POSTED, я аутентифицирую пользователя и затем перенаправляю основную часть приложения.

Util::redirect('/apps/content');

Ошибка произошла не при отправке формы, а в перенаправлении сразу же после нее. По какой-то причине IIS продолжал использовать метод POST для перенаправления, а затем возражал против POST в /apps/content как это каталог.

Сообщение об ошибке никогда не указывало, что это была следующая страница, которая генерировала ошибку - спасибо Microsoft!

Решением было добавить конечную косую черту:

Util::redirect('/apps/content/');

Затем IIS может разрешить перенаправление на документ по умолчанию, поскольку он больше не пытается POST в каталог.

Ответ 2

Я развертываю приложения VB6 IIS на своем удаленном выделенном сервере с 75 папками. Причина, по которой я получал эту ошибку, заключается в том, что документ по умолчанию не был установлен в одной из папок, надзор, поэтому URL-адрес, попавший в эту папку, не знал, к какой странице подключается сервер, и, таким образом, выбросил ошибку, упомянутую в этом потоке.

Ответ 3

Вы случайно попробовали POST vs post? Эта статья поддержки предполагает, что это может вызвать проблемы с IIS: http://support.microsoft.com/?id=828726

Ответ 4

Допустимые глаголы контролируются в web.config(найденном в корневом каталоге веб-сайта) в <system.web><httpHandlers> и, возможно, <webServices><protocols>. Web.config будет доступен вам, если он существует. Существует также глобальный server.config, который, вероятно, не будет. Если вы можете взглянуть на любой из них, вы можете получить подсказку.

Допустимые глаголы могут различаться по типу контента - вы вообще задали заголовки Content-type на своей странице? (т.е. если ваш Content-type был application/json, тогда могут быть разрешены разные глаголы)

Ответ 5

Я не знаю, почему, но это произошло, когда вы отправляете форму внутри страницы самому себе методом POST.

Итак, измените method="post" на method="get" или удалите action="anyThings.any" из тэга <form>.

Ответ 6

Похоже, что на сервере возникают проблемы с обработкой POST-запросов (get и post - это глаголы). Я не знаю, как и почему кто-то настраивал сервер для игнорирования почтовых запросов, но единственным решением было бы исправить сервер или изменить приложение для использования запросов на получение.

Ответ 7

У меня была эта проблема с приложением facebook, которое я разрабатывал для вкладки страницы поклонника. Если кто-то сталкивается с этой проблемой с приложением facebook, то

1-goto https://developers.facebook.com

2 - выберите приложение, которое вы разрабатываете

3 - убедитесь, что вся ссылка на ваше приложение имеет хвостовую черту /

моя проблема была в https://developers.facebook.com- > Приложения- > MYAPPNAME- > settings- > Page Tab- > URL-адрес защищенной страницы, страница Вкладка Изменить URL-адрес, URL-адрес страницы надеюсь, что это поможет

Ответ 8

Как сам дрюм сказал, что это связано с последующей переадресацией после того, как POST на script на самом деле преуспел. (Я мог бы добавить это как комментарий к его ответу, но вам нужно 50 репутации, чтобы прокомментировать, и я здесь новый круглый - Daft rule IMHO)

НО это также применимо, если вы пытаетесь перенаправить на страницу, а не только каталог - по крайней мере, для меня. Я пытался перенаправить на /thankyou.html. Какие исправления используют абсолютный URL, т.е. http://example.com/thankyou.html

Ответ 9

Мне пришлось изменить форму POST на GET. Я просто делал демонстрационную запись на html-странице, на тестовом лазурном сайте. прочитайте это для информации: http://support.microsoft.com/kb/942051

Ответ 10

Дополнительная возможная причина.

В моей HTML-странице были следующие стартовые теги:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

Это было на странице, использующей слайд-шоу slick jquery.

Я удалил теги и заменил на:

<html>

И все снова работает.