Apa yang terjadi ketika permintaan HTTP dihentikan sebelum waktunya?


13

Misalkan, saya memasukkan URL di browser saya dan browser mengirimkan permintaan HTTP. Server HTTP jauh menerima permintaan dan memulai tugas panjang untuk melayani permintaan.

Jika saya menghentikan permintaan sebelum itu selesai (misalnya, tekan Esc atau di Firefox), bagaimana permintaan ditutup? Akankah browser mengomunikasikan permintaan batalkan ini ke server (saya rasa tidak)?

Menganggap tidak, setelah menyelesaikan tugas yang panjang, apa yang akan dilakukan server dengan hasilnya? Apakah tetap mengirimnya kembali? Jika ya, apa yang akan terjadi? Apakah itu menjangkau PC saya? Atau tersesat di jalan?

Ini hanya untuk keingintahuan saya.

Terima kasih atas waktunya :)


2
Sudahkah Anda mencoba menjalankan penangkapan wireshark? Itu membuatnya sangat mudah untuk melihat apa yang dikirim satu komputer ke komputer lain melalui jaringan.
pembalap sepeda

Jawaban:


8

Yah, itu semua tergantung pada apa yang dilakukan server. Biasanya, itu tidak akan "mendeteksi" permintaan yang dihentikan sampai suatu pengiriman dilakukan. Pada saat itu, skrip akan mendapatkan pesan user_abort dari server web (dalam php, Anda dapat mengatakannya untuk mengabaikan aborsi pengguna dengan ignore_user_abort(true);). Tanpa berusaha mengirim data ke klien, tidak ada cara bagi server untuk mengetahui bahwa permintaan itu dibatalkan.

Ketika mencoba mengirim permintaan ke koneksi TCP yang tertutup, apa yang terjadi sepenuhnya tergantung pada perangkat lunak server. Apache berfungsi seperti ini: Jika data yang dikirim masih saat skrip dinamis sedang diproses, ia akan memberi tahu skrip tentang pembatalan dan membiarkannya menangani sesuai keinginannya (PHP --dengan default-- berakhir). Jika skrip selesai, atau permintaan file statis, itu hanya akan mengabaikan koneksi yang ditutup dan kembali.


-2

Saya pikir itu harus dipikirkan jenis listrik. biaya. ketika beberapa koneksi berakhir, data yang dikirim adalah biaya, itu hanya menghilang karena tidak ada soket pendengaran untuk transfer tertentu. hanya jika ada soket, beberapa komunikasi terjadi.

Contoh:

Kami menekan http://localhostuntuk apache2 httpd. misalkan itu tidak berjalan. Browser membuka soket, mengirim pesan ke port 80 (default) dan mencari apakah ada respons. Karena tidak ada pendengar karena apache tidak berjalan, permintaan ping ini tidak mendapat respons sama sekali. setidaknya 200 ok atau jenis goyang sama sekali. lalu apa yang terjadi dengan ping kami? http mengirim beberapa hal: seperti GET http://localhost 80... dll. apa yang terjadi pada baris ini? GET http://localhost 80? itu hanya tuduhan dan menghilang.

Ini hanya keyakinan saya, dan pertama-tama kita harus merujuk ke TCP untuk kejelasan lebih lanjut. Hanya dengan begitu, kita dapat memahami bagaimana protokol Internet dan http berikut berperilaku. Pada akhirnya, sepertinya tidak ada definisi konkret untuk permintaan http yang diakhiri secara prematur. Itulah mengapa disebut pemutusan prematur.


1
Walaupun puitis, mungkin, ini tidak tepat, dan bukan cara yang bermanfaat untuk mempertimbangkan dampaknya.
Falcon Momot
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.