LINUX.ORG.RU
ФорумAdmin

Фильтрация дублирующихся POST запросов.

 , ,


0

1

Иногда в локальной сети наблюдается удваивание пакетов, которое может привести к неодназначной работе web-приложения. Многие могли наблюдать этот глюк в двойных одинаковых сообщениях в комметариях на других ресурсах. Есть ли способ оградиться от этой проблемы не усложняя логику приложения средствами веб-сервера? а если конкретно - то apache.

★★★

Последнее исправление: visual (всего исправлений: 1)

лечится добавлением какого нибудь токена в параметр пост запроса в приложении, не изобретай велосипед

xtraeft ★★☆☆
()

имхо ты не туда думаеш
удваивание пакета никак не скажеться - протокол tcp это умеет исправлять

двойные записи возникают по простой причине - релоад страници - и бровзер предлагает опять послать данные
иль чтото похожее

исключают просто - ставят ограничение - что нельзя постить сообщение в течение секунд 10 после приведущего
и проверяют твое последнее сообщение с новым сообщением - если оно одинаково - то игнорируют
ну и также - страница куда ведет пост сообщения - скрипь принимает сообщение и потом автоматом переадресует клиента на следуюшию страницу - в туже секунду посуществу - и тогда релоад никак не сказываеться

ae1234 ★★
()
Ответ на: комментарий от ae1234

двойные записи возникают по простой причине - релоад страници - и бровзер предлагает опять послать данные

иль чтото похожее

это убито на корню редиректом. А вот пакеты были зафиксированы снифером.

в приложении много форм.

visual ★★★
() автор топика
Ответ на: комментарий от visual

если есть - значит не убило
значит например быстро нажали 2 раза на send

нету никаких двойных пакетов - забуть - такое не пропускает tcp
проверяй на совпадение последнего сообщения с такого ip иль юзера - и новое сообщение - при равенстве - игнорируй

ae1234 ★★
()
Ответ на: комментарий от ae1234

проверяй на совпадение последнего сообщения с такого ip иль юзера - и новое сообщение - при равенстве - игнорируй

а не легче в форму добавлять какой нибудь рандомо генерируемый скрытый параметр?

xtraeft ★★☆☆
()
Ответ на: комментарий от ae1234

нету никаких двойных пакетов - забуть - такое не пропускает tcp

у них был даже одинаковый seq number - просто искать и мнять оборудование никто не хочет.

visual ★★★
() автор топика
Ответ на: комментарий от visual

вот именно что одинаковый seq номер - tcp просто проигнорирует такой пакет
такие пакеты нередкость - но они вообще несказываються на слуд уровне
такчто - нету никаких двойных пакетов - забуть

ae1234 ★★
()
Ответ на: комментарий от xtraeft

не помогет
иль помогет но в недостаточно хорошей степени

ae1234 ★★
()
Ответ на: комментарий от visual

твои глаза видят то что ты хочешь видеть - а не то что в действительности
tcp отслеживает поток байтов - пере запрашивает потери - удаляет повторы
и на след уровень - приложению - уже отдает чистые данные - и тут уже нету никаких повторов - чего непонятного ?

ae1234 ★★
()
Ответ на: комментарий от visual

ну вот форма - даже с защитой через редирект после поста
но что будет если 2 раза быстро нажать send на ней ? до редиректа и не дойдет дело

ae1234 ★★
()
Ответ на: комментарий от ae1234

но что будет если 2 раза быстро нажать send на ней ? до редиректа и не дойдет дело

дойдёт и сработает второй редирект.

visual ★★★
() автор топика
Ответ на: комментарий от visual

Первый запрос прервется, но сервер скорее всего его получит.

note173 ★★★★★
()
Ответ на: комментарий от visual

вот именно - что только второй
но сервер получит и первый - и получиться 2 поста

ae1234 ★★
()
Ответ на: комментарий от visual

Двойные запросы НИЧЕГО не значат, если не было ДВОЙНЫХ ответов-подтверждений приема. Если ответ - один, значит и обработан ОДИН запрос.

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Если ответ - один, значит и обработан ОДИН запрос.

ага, вот только скрипты почему то 2 раза исполняются

visual ★★★
() автор топика
Ответ на: комментарий от visual

тебе уже сказали - юзеры шлют запросы 2 раза. Полностью идентичные пакеты(вплоть до sequence number) игнорируются TCP-стеком по RFC. Если этого не происходит - кури TCP-стек, POST-запросы тут не причем. Если всё таки проблема в дублировании запросов пользователями - кешируй их и выполняй только 1 раз

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

так вот я блин пытаюсь узнать нет ли способа вывполнять только 1 раз с помощью веб-сервера а не логикай в скриптах

visual ★★★
() автор топика
Ответ на: комментарий от Pinkbyte

полностью идентичные пакеты(вплоть до sequence number) игнорируются TCP-стеком по RFC

а они не будут идентичными вплоть до sequence number

xtraeft ★★☆☆
()
Ответ на: комментарий от Pinkbyte

не до конца дочитал твой пост, сорри

Если всё таки проблема в дублировании запросов пользователями - кешируй их и выполняй только 1 раз

тогда все верно

xtraeft ★★☆☆
()

если мне не изменяет склероз, то повторы POST лечатся простым redirect к GET.

гугли GET after POST.

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.