История изменений
Исправление
Legioner,
(текущая версия)
:
Клиент после того, как прочитал ответ, закрывает свою половину соединения. Для этого он посылает TCP пакет FIN. Сервер может использовать этот факт, как индикацию того, что клиент успешно принял ответ сервера. Если такой пакет в течение определённого времени не пришёл или пришёл TCP пакет RST, значит клиент не принял ответ сервера по какой-либо причине. Конечно отсчёт нужно начинать после того, как сервер отошлёт последнюю порцию данных.
Чисто теоретически могут быть упоротые роутеры между вами, которые могут решить закрыть соединение за клиента. Поэтому такой способ нельзя назвать 100% надёжным, особенно при использовании HTTPS. Правильный способ это отдельный запрос. Но если никак не выходит сделать по-нормальному, можно и как описано выше.
Также нужно отметить, что последние версии HTTP используют UDP и тут всё будет ещё сложней.
В общем не советую так делать. Не нужно лезть на уровень протокола ниже, надо оставаться на уровне HTTP. А на этом уровне нужно отсылать отдельное подтверждение отдельным запросом.
Исправление
Legioner,
:
Клиент после того, как прочитал ответ, закрывает свою половину соединения. Для этого он посылает TCP пакет FIN. Сервер может использовать этот факт, как индикацию того, что клиент успешно принял ответ сервера. Если такой пакет в течение определённого времени не пришёл или пришёл TCP пакет RST, значит клиент не принял ответ сервера по какой-либо причине. Конечно отсчёт нужно начинать после того, как сервер отошлёт последнюю порцию данных.
Чисто теоретически могут быть упоротые роутеры между вами, которые могут решить закрыть соединение за клиента. Поэтому такой способ нельзя назвать 100% надёжным, особенно при использовании HTTPS. Правильный способ это отдельный запрос. Но если никак не выходит сделать по-нормальному, можно и как описано выше.
Также нужно отметить, что современный HTTP использует UDP и тут всё будет ещё сложней.
В общем не советую так делать. Не нужно лезть на уровень протокола ниже, надо оставаться на уровне HTTP. А на этом уровне нужно отсылать отдельное подтверждение отдельным запросом.
Исходная версия
Legioner,
:
Клиент после того, как прочитал ответ, закрывает свою половину соединения. Для этого он посылает TCP пакет FIN. Сервер может использовать этот факт, как индикацию того, что клиент успешно принял ответ сервера. Если такой пакет в течение определённого времени не пришёл или пришёл TCP пакет RST, значит клиент не принял ответ сервера по какой-либо причине. Конечно отсчёт нужно начинать после того, как сервер отошлёт последнюю порцию данных.
Чисто теоретически могут быть упоротые роутеры между вами, которые могут решить закрыть соединение за клиента. Поэтому такой способ нельзя назвать 100% надёжным, особенно при использовании HTTPS. Правильный способ это отдельный запрос. Но если никак не выходит сделать по-нормальному, можно и как описано выше.