Соединение закрыто для ответа HTTP-запроса

У меня есть два вопроса о закрытии соединения HTTP:

  1. Если клиент отправляет HTTP-запрос с помощью Connection: рядом с HTTP-сервером, является ли HTTP-сервер или клиент обязанностью отправлять TCP FIN после получения ответа клиентом?

  2. Если клиент отправляет неверно отформатированный HTTP-запрос, а сервер отправляет 400 BAD REQUEST, рекомендуется закрывать соединение по серверу (даже если HTTP-запрос имеет соединение: keep-alive) или рекомендуется сохранять соединение все еще активен?

Заранее спасибо за ответы на мои вопросы?

1 ответ

Решение
  1. Когда сервер получает 400 Bad Request, он собирается отправить ответ с заголовком keep-alive, потому что, если клиенту хочется отправить другой запрос, он может использовать уже существующее соединение (это соединение закрывается в течение определенного количество времени, у него есть срок годности). Заголовок Keep-Alive - это не насыщение сети требованиями к TCP-соединению. Вы в основном говорите: "Я собираюсь поговорить с вами, в течение 2 минут, что бы вы ни отправили мне, я отвечу вам через эту связь"

  2. Сервер - это только объект, который получает команды от пользователя. Вы спрашиваете его, он делает или нет. TCP FIN - это то, что вы отправляете на сервер, чтобы отключить соединение, но выбираете, когда больше не хотите с ним общаться. Клиент передает первый FIN и получает ACK, чтобы убедиться, что сервер его получил. Затем сервер запускает собственный FIN и ожидает подтверждения. Если все в порядке, вы и ваш сервер больше не друзья.

Другие вопросы по тегам