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 :)
Jawaban:
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.
sumber
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://localhost
untuk 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: sepertiGET 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.
sumber