@martensit

Как клиенту гарантированно знать что ответ дошел до сервера?

Клиент отправляет GET запрос серверу.
Сервер получет его, производит определенную операцию, и отправляет ответ, что запрос был получен а операция выполнена.

Но допустим происходит кратковременное падение сети, пока запрос летит серверу, либо когда ответ сервера летит клиенту.
В итоге клиент оправил запрос серверу а ответа не получил. "истекло время ожидания".
Как клиенту точно знать, была ли выполнена нужная операция на сервере или нет?
Можно конечно повторно отправить этот запрос, но тогда операция может быть выполнена дважды, а нам этого тоже не нужно.
  • Вопрос задан
  • 146 просмотров
Решения вопроса 4
MvcBox
@MvcBox
Back-end developer
Для таких операций используйте уникальные идентификаторы запросов.
А на сервере добавьте соответствующую логику проверки, чтобы отсеивать запросы с повторяющимися идентификаторами.
Ответ написан
BojackHorseman
@BojackHorseman
...в творческом отпуске...
никак. клиент может только дождаться или не дождаться ответа от сервера.
Ответ написан
@dpws
Сделайте запрос идемпотентным, например.

Вот неплохая статья от яндекса: Стажёр Вася и его истории об идемпотентности API

P.S.: А вообще, GET запросы не должны иметь сайд-эффектов.
Ответ написан
имхо, только повторно со стороны клиента посылать запрос, пока не получит ответ.
на сервере соответствующим образом обрабатывать запросы дубли.

PS: чтобы допустим различать дубли от недублей, отсылать повторный запрос с одинаковым "таймкодом", новые запросы с новым "таймкодом"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы