Trong các HTTP Response Code, bộ 2xx là trả về khi request thành công. Trong số đó, mọi người chắc quen thuộc nhất là 200 – OK. Tuy nhiên, họ Successful 2xx còn có các mã khác như 201 – Created , 202 – Accepted, 203 – Non-Authoritative Information… Bài viết này mình sẽ đề cập tới mã 204 – No Content, cách sử dụng để tránh rủi ro và những lỗi trời ơi đất hỡi.
204 – No Content dùng làm gì?
Mình sơ dịch từ RFC2616, thì tiêu chuẩn này có đề cập:
Sau khi server chấp nhận request gửi lên, nó sẽ thực hiện hoàn thiện các tác vụ ở phần back-end, nhưng nó sẽ không trả lại thông tin response body nào cả. CỎ THỂ, response sẽ kèm theo các thông tin meta (metainformation) mới hoặc được cập nhật. Các thông tin này NÊN có từ khi gửi các biến lúc request lên.
Và điều quan trọng, khi trả về code 204, TUYỆT ĐỐI KHÔNG trả về response message nào cả.
Như vậy, kịch bản sử dụng 204 – No Content thường là một tác vụ tới server mà không trả lại message. Trường hợp method DELETE trong REST-API là ví dụ điển hình.
204 – No Content cần lưu ý gì?
Thông thường, 204 – No Content sẽ mặc định cache lại response đó trên trình duyệt (tham khảo thêm tại https://httpstatuses.com/204), thời gian tùy vào server đặt. Việc response đã cache chính là lý do mình viết bài này, vì mình dùng 204 một cách ngớ ngẩn như sau:
Mình có tạo một ứng dụng bằng PHP, sử dụng framework Laravel. Sau khi nhận request và xử lý, mình trả lại response code 204 và kèm theo một đoạn message (đây là cách xử lý ngớ ngẩn nhất của mình). 1,2 request đầu không sao, vì thông tin trả y hệt trước. Sau đó mình sửa code, và đặt một số lệnh trước khi return để cho kết quả khác. Nhưng kết quả không ra như ý, nó vẫn là kết quả của đoạn code trước khi sửa! Nguyên nhân của việc này là mình trả response 204, trình duyệt đã tự cache lại kết quả cũ, nên dù thay đổi thì kết quả vẫn vậy.
Vậy giả sử mình vẫn muốn cố tình dùng sai cách, mà kết quả vẫn ra theo ý thì làm thế nào? Mình đã nhờ một số người bạn xem code và được hiến kế thêm header ở response. Header đó điều hướng cho trình duyệt không cache ở các response chỉ định, nên trả về kết quả mới mỗi lần request.
Kết luận
Bài học mình đã rút ra được sau khi tìm hiểu kĩ về 204 – No Content là:
  • Đọc kỹ hướng dẫn sử dụng trước khi dùng” không chỉ với thuốc mà bất kì cái gì để hiểu bản chất và cách dùng, đỡ mất thời gian và lỗi phát sinh. Điển hình hãy tìm hiểu quy chuẩn RFC2616 khi dùng các mã HTTP Status Code.
  • 204 – No Content nhắc lại lần nữa, là No Content. Chỉ gửi status code, cùng lắm thêm các header. KHÔNG kèm them message.
  • Hãy thêm header để trình duyệt chống lại cache.
Vũ Công Thành – CyRadar
Tin liên quan: