Cùng một bài, đọc bằng chữ. Nhanh hơn và tìm lại được bằng Ctrl+F.
100 request HTTP/1 trên Go 1.26. Cùng code, Go 1.27: khoảng 150 ms.
Body là phần nội dung server trả về
http.Get trả về status và header trước. Phần nội dung phía sau gọi là body. Nó vẫn nằm trên kết nối cho tới khi code đọc.
Hàm này không đọc body
Mở kết nối mới mất vài lượt đi về
Với HTTPS, máy bạn và server phải hỏi đáp vài lượt qua mạng để thiết lập bảo mật. Xong mới gửi được request. Vì vậy HTTP/1 giữ kết nối mở cho request sau.
Vì sao kết nối bị bỏ
- Nối đuôiHTTP/1 gửi các response nối đuôi nhau trên cùng một kết nối
- Còn dưBody chưa đọc hết thì response sau bị kẹt phía sau phần dư
- Mở mớiGo 1.26 bỏ kết nối đó, mở kết nối mới cho request sau
Đọc bỏ phần body còn lại
Go 1.27 tự đọc bỏ phần dư
Từ Go 1.27, chỉ cần Close như cũ. Go tự đọc phần body còn lại ở nền, tối đa 50 ms hoặc 256 KB, rồi dùng lại kết nối.
Code gọi HTTP trong Go
Nên
Luôn Close body, kể cả khi không đọc nó
Chạy go version, xem đã lên 1.27 chưa
Không nên
Đọc bỏ body với HTTP/2, nó không bị lỗi này
Đọc bỏ body quá lớn, mở kết nối mới còn nhanh hơn
Mở lại code gọi API của bạn
Giữ dòng Close. Đang ở Go 1.26 thì update lên 1.27, khỏi viết đoạn đọc bỏ body.













