Що відбувається, коли запит HTTP припиняється передчасно?


13

Припустимо, я ввожу URL-адресу у своєму браузері, а браузер подає запит HTTP. Віддалений сервер HTTP приймає запит і ініціює довге завдання для обслуговування запиту.

Якщо я припиняю запит до його завершення (наприклад, натисніть Esc або в Firefox), як запит закритий? Чи повідомляє браузер цей запит на переривання сервера (я думаю, це не так)?

Якщо припустити, що після виконання довгого завдання немає, що сервер зробить з результатом? Це все одно повертає назад? Якщо це станеться, що буде? Чи доходить до мого ПК? Або загубиться в дорозі?

Це тільки для моєї цікавості.

Дякую за ваш час :)


2
Ви спробували запустити захоплення проводів? Це дозволяє легко зрозуміти, що один комп’ютер надсилає на інший по мережі.
рацикліст

Відповіді:


8

Ну, все залежить від того, що робить сервер. Зазвичай він не "виявить" припинений запит, поки не буде здійснена спроба надсилання. У цей момент сценарій отримає повідомлення користувача_abort з веб-сервера (у php, ви можете сказати йому, щоб ігнорувати користувач перериває ignore_user_abort(true);). Не намагаючись надіслати дані клієнту, сервер не може знати, що запит перервано.

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


-2

Я думаю, що варто думати про електричну річ. зарядка. коли деяке з'єднання припиняється, дані, що надсилаються, стягуються, вони просто зникають, оскільки для цієї конкретної передачі немає сокету для прослуховування. тільки якщо є розетка, відбувається деяке спілкування.

Приклад:

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

Це лише моє переконання, і ми повинні спочатку звернутися до TCP для більшої ясності. Тільки тоді ми можемо зрозуміти, як веде себе Інтернет-протокол та наступний http. Зрештою, схоже, немає конкретного визначення для достроково припиненого запиту http. Саме тому його називають передчасним припиненням.


1
Хоча поетичне, можливо, це неточне, і не особливо корисний спосіб розглянути вплив цього.
Falcon Momot
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.