Предположим, я ввел URL в своем браузере, и браузер отправил HTTP-запрос. Удаленный HTTP-сервер принимает запрос и инициирует длинную задачу для обслуживания запроса.
Если я завершу запрос до его завершения (например, нажмите клавишу Esc или Firefox), как будет закрыт запрос? Будет ли браузер передавать этот запрос на сервер (я думаю, что нет)?
Предполагая, что нет, по завершении длинной задачи, что сервер сделает с результатом? Это все равно отправляет обратно? Если это произойдет, что произойдет? Достигнет ли он моего ПК? Или заблудился в пути?
Это только для моего любопытства.
Спасибо за ваше время :)
Ответы:
Ну, все зависит от того, что делает сервер. Как правило, он не «обнаруживает» завершенный запрос, пока не будет предпринята попытка отправки. В этот момент скрипт получит сообщение user_abort от веб-сервера (в php вы можете указать, что пользователь должен игнорировать прерывания
ignore_user_abort(true);
). Не пытаясь отправить данные клиенту, сервер не сможет узнать, что запрос был прерван.Когда он пытается отправить запрос на закрытое TCP-соединение, то, что происходит, полностью зависит от программного обеспечения сервера. Apache работает следующим образом: если отправленные данные все еще находятся в процессе обработки динамического сценария, он сообщит сценарию об отказе и разрешит обработать его так, как он хочет (PHP - по умолчанию - завершается). Если скрипт выполнен или это статический запрос файла, он просто проигнорирует закрытое соединение и вернется.
источник
Я думаю, что нужно думать об электричестве. заряжать. Когда завершается какое-либо соединение, отправляемые данные являются платными, они просто исчезают, поскольку для этой конкретной передачи нет доступного сокета прослушивания. только если есть сокет, происходит некоторое общение.
Пример:
Мы ударили
http://localhost
по apache2 httpd. Предположим, он не работает. Браузер открывает сокет, отправляет сообщение на порт 80 (по умолчанию) и проверяет, есть ли ответ. Поскольку нет слушателя, так как apache не работает, этот запрос ping вообще не получает никакого ответа. по крайней мере 200 хорошо или любой вид дрожания рук на всех. тогда что происходит с нашим пингом? http отправляет что-то: какGET http://localhost 80
... и т.д., что происходит с этой строкой?GET http://localhost 80
? это просто заряд и исчезает.Это всего лишь мое убеждение, и мы должны сначала обратиться к TCP для большей ясности. Только тогда мы сможем понять, как ведут себя интернет-протокол и последующие http. В конечном счете, похоже, что нет конкретного определения преждевременно завершенного http-запроса. Вот почему это называется преждевременным прекращением.
источник