Соединение закрыто для ответа HTTP-запроса
У меня есть два вопроса о закрытии соединения HTTP:
Если клиент отправляет HTTP-запрос с помощью Connection: рядом с HTTP-сервером, является ли HTTP-сервер или клиент обязанностью отправлять TCP FIN после получения ответа клиентом?
Если клиент отправляет неверно отформатированный HTTP-запрос, а сервер отправляет 400 BAD REQUEST, рекомендуется закрывать соединение по серверу (даже если HTTP-запрос имеет соединение: keep-alive) или рекомендуется сохранять соединение все еще активен?
Заранее спасибо за ответы на мои вопросы?
1 ответ
Когда сервер получает 400 Bad Request, он собирается отправить ответ с заголовком keep-alive, потому что, если клиенту хочется отправить другой запрос, он может использовать уже существующее соединение (это соединение закрывается в течение определенного количество времени, у него есть срок годности). Заголовок Keep-Alive - это не насыщение сети требованиями к TCP-соединению. Вы в основном говорите: "Я собираюсь поговорить с вами, в течение 2 минут, что бы вы ни отправили мне, я отвечу вам через эту связь"
Сервер - это только объект, который получает команды от пользователя. Вы спрашиваете его, он делает или нет. TCP FIN - это то, что вы отправляете на сервер, чтобы отключить соединение, но выбираете, когда больше не хотите с ним общаться. Клиент передает первый FIN и получает ACK, чтобы убедиться, что сервер его получил. Затем сервер запускает собственный FIN и ожидает подтверждения. Если все в порядке, вы и ваш сервер больше не друзья.