Возможные причины того, что браузер выполняет GET, а не публикует - PullRequest
4 голосов
/ 22 сентября 2010

Одна из наиболее распространенных ошибок в веб-приложении заключается в том, что пользователь выполняет запрос GET, когда форма должна была отправить запрос POST.

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

Вопрос в том, есть ли другие менее очевидные способы, которыми это могло бы произойти (предварительный просмотр печати / кнопка возврата и т. Д.)?

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

EDIT: Нет данных, отправленных с запросом GET, и поэтому страница обработки вылетает.

Ответы [ 4 ]

0 голосов
/ 01 декабря 2010

У меня была похожая проблема, хотя, похоже, она была не вашей.У меня была форма, которая была отправлена ​​через ajax, и я никогда не должен использовать отправку по умолчанию.Время от времени я получал ошибки от GET, сделанного в форме.Не должно быть возможности отправить эту форму;однако некоторые версии Safari для Mac отправляли его при входе.Я просто добавил jquery form.submit (), чтобы предотвратить функциональность по умолчанию.Я также установил действие для страницы, которая не приведет к ошибке (в случае отсутствия javascript).

0 голосов
/ 22 сентября 2010

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

Может быть, вы можете использовать Firebug (отслеживать запросы на вкладке .net) или Fiddler и провести несколько тестов с разными пользователями / страницами, если вы можете воспроизвести его, просто нажав клавишу ввода в адресной строке.

Edit: Кроме того, get всегда должен «извлекать информацию», поэтому, если браузер чего-то не хватает или что-то нужно, это будет get, но снова проверьте в журнале IIS эти запросы get и попробуйте их в браузере, если они содержат строку запроса для viewstate и eventvalidation , тогда они действительно неправильно формируют запрос от post, чтобы получить, если метод формы явно не установлен для получения.

0 голосов
/ 23 сентября 2010

Я считаю, что ответ на вопрос "каковы причины того, что браузер выполняет GET, а не POST", не помогает решить проблему получения GET в форме, в которой вы ожидаете GET.Но: Чтобы ответить на этот вопрос, я бы просто сказал, что вы получаете GET, потому что браузер отправляет GET, и вы можете отправить GET на любую страницу, где вы можете отправить POST.С другой стороны, если пользователь использует форму, браузер отправляет POST.Таким образом, ваш сервер должен быть готов к обработке GET, и он должен обрабатывать GET так же, как POST с недопустимыми параметрами.Мое предложение:

  • Если вы получили GET, снова откройте форму.
  • Если вы получили POST с недействительными данными, снова откройте форму и сообщите пользователю, что он долженвведите данные определенным образом.

Возможно, тривиальный ответ, но я бы так и сделал.Не знаю, добавляет ли это к обсуждению.

0 голосов
/ 22 сентября 2010

Неправильно, самая очевидная причина, почему вы получаете GET вместо POST, заключается в том, что вы делаете GET вместо POST.

Менее очевидная причина - вы забыли указать method = "post" в одной из ваших форм. Стандарт HTML определяет, что по умолчанию используется метод GET, поэтому, если вы хотите выполнить POST, вы должны явно указать method = "post".

Внимательно изучите все ваши теги и убедитесь, что все они явно указывают method = "post".

РЕДАКТИРОВАТЬ: когда вы нажимаете на адресную строку и нажимаете ввод, да, это правда, что браузер будет получать страницу, но ваша форма не будет отправлена ​​таким образом, так как браузер обрабатывает URL-адрес аналогично тому, как вставить копию URL-адрес: новый сеанс без дополнительной информации, отправляемой на сервер (кроме файлов cookie).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...