Khi client cancel http request thì backend có cancel luôn không?

Hi ạ, nếu em tạo một http request đang trạng thái pending, em lại cancel ngay lập tức thì phía server có nhận được http request nào không? Nếu client abort một http request ngay sau khi khởi tạo request thì em nghĩ sẽ có 2 trường hợp xảy ra:

  • Server vẫn nhận http và xử lý và response như bình thường nhưng client không nhận http response.
  • Khi client thực hiện hành động abort thì client cũng gửi tín hiệu abort cho server, server cũng hủy task luôn.

Mong được giải đáp.

Nếu đang pending, request đó có thể đã đến server hoặc chưa. Về lý thuyết, có thể cancel request để nó không đến được server, nhưng khó làm vì thường mọi thứ diễn ra rất nhanh và cũng phụ thuộc vào thư viện, tool được dùng phía client.

Nếu request đã được tiếp nhận và đang được xử lý bởi server, khi abort, client sẽ không nhận lại request. Server sẽ nhận được tín hiệu abort và có thể vẫn cố gắng xử lí nốt hoặc không, tùy vào người viết chương trình. Các web framework có cách riêng để người viết chương trình xử lý trường hợp này.

1 Like

Như @Nam_Nguyen14 đề cập, tùy thuộc vào thời điểm cậu abort. Nếu cậu chưa kịp thiết lập HTTP connection, sẽ không có gì xảy ra cả.
Nếu như cậu đã thiết lập kết nối, một khi đã gửi HTTP request, cậu sẽ không có cách nào abort nó, cũng không có cách nào gửi tín hiệu abort tới server (đó là design của HTTP, để đảm bảo nó stateless). Khi request tới server, nó sẽ được thực hiện như bình thường, mà không quan tâm tới việc kết nối có còn không, cho tới khi kết quả được gửi lại client (chỉ tới khi đó, server mới có thể biết client đã đóng kết nối hay chưa).

Hope it helps!

3 Likes

Server vẫn biết được client có nhận response không luôn hả anh? Có phải tích chất handshake TCP/IP không anh?

Không không, server chỉ có thể biết client có còn giữ kết nối không (nếu không còn, cậu có thể sẽ nhận được lỗi liên quan tới việc client đã đóng kết nối). Server không biết client có nhận được response không đâu cậu @@

2 Likes

Theo như em biết http là stateless thì giữa client vào server không giữ kết nối với nhau. Vậy trong lúc client đang chờ response thì giữa client và server vẫn còn giữ kết nối với nhau hả anh?
Không biết có liên quan gì đến bài viết này không nhỉ? https://stackoverflow.com/a/1179619/16734199

1 Like

về bản chất, http là wrapper của tcp, kết nối sẽ release sau done hết mọi việc
và tất nhiên cũng có thể bị đơn phương chấm dứt từ 1 bên

bạn hiểu sai chữ stateless, nó không liên quan gì tới việc giữ hay không giữ kết nối, nó chỉ đơn thuần là request - response, chỉ là trong quá trình chờ không có gửi thêm data mà thôi, hành động gửi đi và nhận lại chỉ 1 lần

vấn đề abort, chỉ đơn giản là phía client đóng kết nối hoặc huỷ đăng event nhận response mà thôi
server sau khi nhận vẫn xử lý như bình thường

kể cả khi bạn muốn implement việc “ngưng” chương trình ở phía server, thì chuyện này bên server bạn sẽ làm gì?
ví dụ đơn gỉan hơn, bạn thử viết một đoạn code mà bạn có thể ngưng một cái method nào đó đang chạy xem, có được không, có thể là method đang chạy ở cái thread khác
bạn chỉ có thể huỷ nhận event đã đăng kí, hoặc cực đoạn hơn là bạn stop hẳn cái thread hoặc chương trình
cái này thì nó đã như tên đã bắn đi, bạn chỉ có thể làm lơ kết qủa chứ không làm cho mũi tên nó tự rớt giữa đường được, hoặc như mình nói ở trên, theo cách cực đoan thì chắc là bắn 1 viên đạn vào mũi tên cho nó rớt khi nó đang bay giữa chừng

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?