HTTP GET вместо POST происходит случайно - PullRequest
1 голос
/ 14 марта 2011

Мы начали испытывать следующую проблему с января.Случайным образом мы получаем GET запросов по URL, которые должны получать только POST формы запросов.Запрос GET не имеет параметров (т.е. данные формы не видны в URL).Такие запросы приводят к исключению в маршрутизации Rails («Разрешены только почтовые запросы.»), И пользователь получает страницу ошибки 500.

  • Проблема возникает менее одного раза в день (мы получаем сотни POST запросов каждый день).
  • Кажется, это происходит в нескольких браузерах (IE7, IE8, Chrome).
  • Кажется, что перезагрузка страницы с формой решает проблему (у меня есть один подтвержденный случай, когда не перезагрузка страницы не устранила ее).
  • Я не могуВоспроизведите проблему самостоятельно.
  • Запросы поступают от реальных пользователей, а не от роботов.
  • Форма имеет атрибут method="post".
  • Проблема, как правило, возникает на одномформы, но произошло и в другом месте.

Я проверил страницу на наличие javascripts, которые могли бы повлиять на метод формы, но я не нашел подозреваемых.Сайт сделан с использованием Rails, используется jQuery.

Есть идеи, что может быть причиной проблемы или как ее исследовать?

Спасибо.

ОБНОВЛЕНИЕ: Мы запускаем Nginx + Беспородный кластер . Nginx access.log показывает GET запросов, которые мы наблюдаем, и в Nginx error.log.

нет соответствующих записей.

Ответы [ 2 ]

1 голос
/ 22 января 2014

Я обнаружил подобное поведение в Chrome, выполнив следующие действия:

  1. ПОЛУЧИТЕ форму (html) (response1)
  2. Данные формы POST (response2)
  3. POST другая форма данных (response3)
  4. Нажмите назад

В этом случае вместо возврата на страницу response2 Chrome выполняет GET по адресу, используемому в пункте 2.

Похожая ошибка возникает в предыдущей версии Chrome, когда вы обновляете (f5) страницу, созданную методом POST.

Версия Chrome: 32.0.1700.76 m

0 голосов
/ 14 марта 2011

Я видел похожие ошибки на моем сервере.Это было около года или более назад.Насколько я помню, это было вызвано нашим веб-сервером.Старые версии Passenger не очень хорошо работали с Apache.Обновление Пассажира до новой версии решило проблему.Теперь я перешел на Nginx.

Так что убедитесь, что вы обновили программное обеспечение веб-сервера, что бы вы ни использовали.И проверяйте журналы вашего веб-сервера на наличие ошибок, а не Rails production.log.

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