Điều gì xảy ra khi một yêu cầu HTTP bị chấm dứt sớm?


13

Giả sử, tôi nhập một URL trong trình duyệt của mình và trình duyệt gửi yêu cầu HTTP. Máy chủ HTTP từ xa chấp nhận yêu cầu và bắt đầu một tác vụ dài để phục vụ yêu cầu.

Nếu tôi chấm dứt yêu cầu trước khi hoàn thành (ví dụ: nhấn Esc hoặc trong Firefox), yêu cầu được đóng như thế nào? Trình duyệt sẽ thông báo yêu cầu hủy bỏ này đến máy chủ (tôi nghĩ là không)?

Giả sử không, sau khi hoàn thành nhiệm vụ dài, máy chủ sẽ làm gì với kết quả? Nó có gửi lại không? Nếu nó xảy ra, điều gì sẽ xảy ra? Nó đạt đến PC của tôi? Hay bị lạc trên đường?

Đây chỉ là cho sự tò mò của tôi.

Cảm ơn vì đã dành thời gian cho tôi :)


2
Bạn đã thử chạy một chụp wireshark? Nó làm cho nó thực sự dễ dàng để xem những gì một máy tính gửi cho một máy tính khác qua mạng.
tay đua

Câu trả lời:


8

Vâng, tất cả phụ thuộc vào những gì máy chủ đang làm. Thông thường, nó sẽ không "phát hiện" yêu cầu bị chấm dứt cho đến khi gửi được thử. Tại thời điểm đó, tập lệnh sẽ nhận được thông báo user_abort từ máy chủ web (bằng php, bạn có thể yêu cầu nó bỏ qua việc người dùng hủy bỏ với ignore_user_abort(true);). Không cố gửi dữ liệu đến máy khách, không có cách nào để máy chủ biết rằng yêu cầu đã bị hủy bỏ.

Khi nó cố gửi yêu cầu đến kết nối TCP đã đóng, điều gì xảy ra hoàn toàn phụ thuộc vào phần mềm máy chủ. Apache hoạt động như thế này: Nếu dữ liệu đã gửi vẫn còn trong khi tập lệnh động đang xử lý, nó sẽ thông báo cho tập lệnh về việc hủy bỏ và để nó xử lý nó theo cách nó muốn (PHP --by default-- chấm dứt). Nếu tập lệnh được thực hiện hoặc đó là một yêu cầu tệp tĩnh, nó sẽ chỉ bỏ qua kết nối đóng và trả về.


-2

Tôi nghĩ rằng đó là suy nghĩ của loại điện. sạc điện. khi một số kết nối chấm dứt, dữ liệu được gửi là một khoản phí, nó sẽ biến mất vì không có ổ cắm nghe nào cho việc chuyển cụ thể đó. Chỉ khi có một ổ cắm, một số giao tiếp xảy ra.

Thí dụ:

Chúng tôi nhấn http://localhostcho apache2 httpd. giả sử nó không chạy Trình duyệt mở một ổ cắm, gửi tin nhắn đến cổng 80 (mặc định) và xem nếu có bất kỳ phản hồi nào. Vì không có người nghe vì apache không chạy, nên yêu cầu ping này hoàn toàn không nhận được phản hồi nào. ít nhất 200 ok hoặc bất kỳ loại lắc tay nào cả. Sau đó, những gì xảy ra với ping của chúng tôi? http gửi một số điều: như GET http://localhost 80... vv những gì xảy ra với dòng này? GET http://localhost 80? nó chỉ là một điện tích và biến mất.

Đây chỉ là niềm tin của tôi và trước tiên chúng ta nên tham khảo TCP để rõ ràng hơn. Chỉ sau đó, chúng ta có thể hiểu giao thức Internet và http tiếp theo hoạt động như thế nào. Cuối cùng, có vẻ như không có định nghĩa cụ thể cho yêu cầu http kết thúc sớm. Đó là lý do tại sao nó được gọi là chấm dứt sớm.


1
Trong khi thơ mộng, có lẽ, điều này là không chính xác, và không phải là một cách đặc biệt hữu ích để xem xét tác động của điều này.
Falcon Momot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.