У меня есть приложение для iphone, использующее ASIHttpRequest. Код сервера находится на heroku в node.js
Время от времени из приложения iphone отправляется один запрос (только одна трассировка), но он принимается дважды на herokuapp (я вижу дважды один и тот же запрос в журналах heroku).
Я, хотя вначале запрос был запрошен дважды из-за ошибки в первой попытке, но это не так, поскольку оба запроса (тот, который мне нужен, и второй, который мне не нужен) выполняются на стороне сервера.
Любая идея ?
Меня это тоже укусило. Я использовал запрос GET для проверки кода многоразового ваучера на сервере. Когда мы добавили ограничение скорости использования кодов, некоторые клиенты сообщили о превышении лимита раньше, чем должны были. Оказалось, что некоторые проверки привели к двум выкупам.
Я предполагаю, что ваш запрос использует метод GET.
Поведение по умолчанию при использовании GET - разрешить постоянные соединения (HTTP-заголовок Keep-Alive).
При использовании постоянного соединения ваш GET-запрос может быть повторно передан, если что-то в сети выглядит нестабильно (это технический термин) вместо того, чтобы запрос просто не удался. Обычно это желательно, потому что запросы GET часто не имеют побочных эффектов на сервере.
С другой стороны, запросы POST или PUT по умолчанию не используют постоянное соединение и не будут повторно передавать вашу операцию, которая вполне может быть покупкой кредитной карты или чем-то еще со значительными побочными эффектами.
Если вы хотите, чтобы ваш ASIHTTPRequest GET иногда отправлял 2 или более запросов к серверу (из-за проблем с сетью вне вашего контроля), вы можете просто установить этот флаг:
request.shouldAttemptPersistentConnection = NO;
Это должно позаботиться о ложных дубликатах GET на сервере.