Дублирующие запросы с разными IP-адресами от клиента, вызывающие дублирующие действия в контроллере Ruby on Rails 3.2
Некоторое время я пытался разобраться в этой проблеме, перепроверив мой код и выполнив поиск в Интернете, я нашел несколько возможных ответов, если причина была в чем-то другом, но не совсем так, как у меня здесь, поэтому я подумал, что пришло время опубликовать мой первый вопрос, надеюсь, это не относится к stackoverflow.com:
В приведенном ниже файле журнала клиент, кажется, отправляет два запроса на один и тот же ресурс, но с разными IP-адресами одновременно. Каждый клиент имеет уникальный идентификатор "12345" в случае этого клиента. Часть моего рабочего процесса после того, как мы доберемся до последней страницы, страница 8 -> "/app/page/8/12345", приложение отправляет электронное письмо.
Насколько я могу судить, эти дублирующие запросы к приложению вызывают дублирующие действия в моем контроллере и вызывают дублирование электронных писем.
Поэтому мой вопрос: что может быть причиной этих дублирующих запросов и что я могу с этим сделать?
- Неужели клиент действительно отправляет два запроса, возможно, потому что у него настроены два IP-адреса или они проходят через VPN, и оба IP-адреса отображаются на моем сервере?
- Может ли это быть проблемой конфигурации на Apache или Passenger Standalone, которую я пропустил.
- Существует ли стандартный способ обработки запросов такого типа? Это первый раз, когда я вижу такой тип проблемы.
Это происходит не для каждого запроса и не для каждого пользователя, а для некоторых пользователей. Когда я тестирую, файлы журнала показывают только один запрос, когда я нажимаю кнопку "Отправить" в браузере, без дубликатов.
Журнальный файл:
.
.
.
.
Started GET "/app/page/5/12345" for 189.19.xxx.xxx at 2013-02-17 22:44:46 -0800
Processing by MainController#page as */*
Parameters: {"page_no"=>"5", "id"=>"12345"}
Started GET "/app/page/5/12345" for 184.102.xxx.xxx at 2013-02-17 22:44:46 -0800
Processing by MainController#page as HTML
Parameters: {"page_no"=>"5", "id"=>"12345"}
Rendered main/_range_table.html.erb (7.1ms)
Rendered main/_range_table.html.erb (7.2ms)
Rendered main/page.html.erb within layouts/main (18.3ms)
Completed 200 OK in 29ms (Views: 17.5ms | ActiveRecord: 4.2ms)
Rendered main/page.html.erb within layouts/main (17.6ms)
Completed 200 OK in 26ms (Views: 17.2ms | ActiveRecord: 3.3ms)
Started POST "/app/page/5/12345" for 184.102.xxx.xxx at 2013-02-17 22:44:57 -0800
Processing by MainController#page as HTML
Parameters: {"utf8"=>"?", "authenticity_token"=>"4exZYGAEcu4xffiBfh45u877bvF0zGpNXJhL98QLzy0=", "response"=> {"43"=>"8"}, "commit"=>"Submit", "page_no"=>"5", "id"=>"12345"}
Redirected to http://<mydomain_here>/app/page/6/12345
Completed 302 Found in 24ms (ActiveRecord: 6.7ms)
Started GET "/app/page/6/12345" for 189.19.xxx.xxx at 2013-02-17 22:44:57 -0800
Processing by MainController#page as */*
Parameters: {"page_no"=>"6", "id"=>"12345"}
Started GET "/app/page/6/12345" for 184.102.xxx.xxx at 2013-02-17 22:44:57 -0800
Processing by MainController#page as HTML
Parameters: {"page_no"=>"6", "id"=>"12345"}
.
.
.
.
.
Спасибо за любую помощь или предложения, чтобы указать мне в правильном направлении!
1 ответ
Хорошо, я полагаю, что у меня есть ответ на мой вопрос после долгих исследований и пересмотра старого кода в моем приложении:
Откуда поступают эти запросы? Из того, что я исследовал и мои наблюдения:
а. Эти запросы стали более частыми с первого года (январь 2013 г.), но без изменений в моем коде, кажется, что-то изменилось в Интернете, возможно, или с клиентскими машинами или сетевой инфраструктурой. Я собираюсь с сетевой инфраструктурой, возможно, какое-то обновление... см. (Б.)
б. Во время моего онлайн-исследования было высказано предположение, что некоторые прокси-серверы могут повторно запрашивать URL-адреса запросов своих клиентов и выполнять дополнительные операции GET для кэширования этих страниц. Я видел это через несколько секунд после первоначального запроса или до 30 минут спустя.
Большая ошибка... Я нашел устаревший код, который обрабатывал изменения БД в запросах GET, насколько я понимаю, это нет, нет, и все изменения БД должны выполняться только для запросов POST.
Таким образом, в основном мой код должен обрабатывать столько GET, сколько входит на один и тот же URL, без каких-либо действий, кроме возврата одних и тех же данных каждый раз без обновлений БД.
Так что теперь это было исправлено. Надеюсь, этот пост поможет кому-то с подобной проблемой!