Что происходит при преждевременном завершении HTTP-запроса?

Что происходит при преждевременном завершении HTTP-запроса?

Предположим, я ввожу URL в свой браузер, и браузер отправляет HTTP-запрос. Удаленный HTTP-сервер принимает запрос и инициирует длительную задачу по обслуживанию запроса.

Если я прерву запрос до его завершения (например, нажму Esc или в Firefox), как запрос будет закрыт? Сообщит ли браузер об этом запросе на прерывание на сервер (я думаю, что нет)?

Если нет, то по завершении долгой задачи, что сервер будет делать с результатом? Отправит ли он его обратно в любом случае? Если отправит, что произойдет? Дойдет ли он до моего ПК? Или потеряется по пути?

Это просто из любопытства.

Спасибо за ваше время :)

решение1

Ну, все зависит от того, что делает сервер. Обычно он не «обнаруживает» завершенный запрос, пока не будет предпринята попытка отправки. В этот момент скрипт получит сообщение user_abort от веб-сервера (в php вы можете указать ему игнорировать прерывания пользователя с помощью ignore_user_abort(true);). Без попытки отправить данные клиенту сервер не сможет узнать, что запрос был прерван.

Когда он пытается отправить запрос на закрытое TCP-соединение, то, что происходит, полностью зависит от программного обеспечения сервера. Apache работает следующим образом: если отправленные данные все еще находятся в процессе обработки динамического скрипта, он сообщит скрипту об отмене и позволит ему обработать их так, как он хочет (PHP --по умолчанию -- завершает работу). Если скрипт завершен или это статический запрос файла, он просто проигнорирует закрытое соединение и вернется.

решение2

Я думаю, что это следует рассматривать как нечто вроде электричества. Заряд. Когда какое-то соединение прерывается, отправляемые данные представляют собой заряд, он просто исчезает, поскольку для этой конкретной передачи нет доступного прослушивающего сокета. Только если есть сокет, происходит некоторая связь.

Пример:

Мы нажимаем http://localhostна apache2 httpd. предположим, что он не запущен. Браузер открывает сокет, отправляет сообщение на порт 80 (по умолчанию) и смотрит, есть ли какой-либо ответ. Поскольку прослушивателя нет, так как apache не запущен, этот запрос ping вообще не получает никакого ответа. по крайней мере 200 ok или вообще какое-либо подтверждение. что тогда происходит с нашим ping? http отправляет что-то: типа GET http://localhost 80... и т. д. что происходит с этой строкой? GET http://localhost 80? это просто заряд и он исчезает.

Это всего лишь мое убеждение, и мы должны сначала обратиться кТКПдля большей ясности. Только тогда мы сможем понять, как ведут себя интернет-протокол и последующий http. В конечном счете, похоже, нет конкретного определения для преждевременно завершенного http-запроса. Вот почему это называется преждевременным завершением.

Связанный контент