2015-07-15 1 views
0

Что касается HTTP-поддержки, как следует запрашивать время ожидания запроса на стороне клиента? Например, существует поток:Обработка запросов таймаута HTTP-клиента в связях keep-alive

  • Клиент отправляет запрос1;
  • Клиент ждет 1 минуту;
  • Клиент принимает отказ Request1 и повторно отправляет его, т. Е. Отправляет новый Request2 = Request1;
  • Сервер отвечает Response1 (который является ответом для Request1);
  • Клиент предполагает, что это ответ на Request2, но может обрабатывать его, поскольку Request1 = Request2;
  • Клиент отправляет запрос3;
  • Сервер отвечает Response2 (который является ответом для Request2);
  • Клиент предполагает, что это ответ на Request3 и не может его обработать.

Не удалось найти информацию в specification. В нем говорится, как повторить попытку, если соединение было закрыто сервером, но ничего о ситуации, когда запрос слишком долго продолжался.

ответ

0

У меня есть опыт работы с ASP.NET, хотя я не уверен, что этот парадигма используется для всех HTTP-конвейеров. Вот что я понимаю:

  • Ответ привязан к запросу. В C# существует HttpContext, что облегчает это. Новый запрос поступает в отдельный поток, который не имеет безопасного контекста других запросов.
  • Когда клиент делает запрос (например, через WebRequest), ответ привязан к этому запросу.

Поэтому Request1 в вашем примере никогда не может быть смешано с Request2. keep-alive, который используется в заголовке HTTP-запроса, указывает, что базовый TCP connection shouldn't be closed, чтобы он мог быть повторно использован для других запросов. Насколько я понимаю, один тайм-аут запроса не влияет на базовое TCP-соединение; то есть, несмотря на то, что соединение TCP является общим, механизмы запроса-ответа работают как обычно.

Смежные вопросы