Назад | Перейти на главную страницу

ASIHttpRequest дублирующий запрос на героку

У меня есть приложение для 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 на сервере.