Appearance
Ngày nay, mỗi một giây trôi qua, có hàng triệu request HTTP được gửi đi và nhận về trên mạng global hoặc mạng internal. HTTP là một phần không thể thiếu trong cuộc sống của chúng ta. Một trong những thành phần quan trọng nhất của HTTP là HTTP Status Code.
Một vấn đề thực tế ở Việt Nam là các lập trình thường chỉ biết đến các Status Code là 200
, 400
, 401
, 403
và 500
. Nhiều status khác như 201
, 204
, 206
, 301
... thì ít khi được sử dụng nên không được biết đến.
Nhiều khi các lập trình viên vẫn chưa phân biệt được giữa 401
và 403
hoặc khác biệt giữa các status code 2xx, 3xx, 4xx và 5xx nên khi trả về lỗi cho client khiến team Forntend hoặc bên thứ 3 không hiểu rõ vấn đề.
Một vấn đề nữa là hiện tại nhiều kiểu thiết kế wrapper status Response
được sử dụng nên khi trả về lỗi hoặc thành công vẫn là 200 hoặc chỉ có 200 và 400.
Ví dụ về wrapper status Response
shell
# Thành công (HTTP 200)
curl -X GET http://api.example.com/users/123 -H "Authorization: Bearer TOKEN"
# Response:
{
"code": 0,
"status": "success",
"message": "User retrieved successfully.",
"data": { "id": 123, "name": "John Doe" }
}
# Lỗi logic (HTTP 200)
curl -X GET http://api.example.com/users/999 -H "Authorization: Bearer TOKEN"
# Response:
{
"code": 1001,
"status": "error",
"message": "User not found.",
"data": null
}
# Request không hợp lệ (HTTP 400)
curl -X POST http://api.example.com/users -H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" -d '{"name":""}'
# Response:
{
"code": 1002,
"status": "error",
"message": "Validation failed: 'name' field is required.",
"data": null
}
Bài viết này mình sẽ chia sẻ với các bạn về ý nghĩa của các HTTP Status Code thông dụng và trường hợp sử dụng chúng.
HTTP Status code là gì ?
Theo tài liệu rfc của HTTP thì HTTP code là một số nguyên không âm gồm 3 chữ số, mỗi một số đại diện cho một ý nghĩa cụ thể.
HTTP Status Code được sử dụng để thông báo nhanh cho client về kết quả của request mà nó đã gửi đi. Client sẽ có cái nhìn tổng quan nhanh về kết quả của request chứ chưa cần kiểm tra kỹ content response, ví dụ thành công hay thất bại.
HTTP Status Code được chia thành 5 nhóm chính: 1xx
, 2xx
, 3xx
, 4xx
và 5xx
.
Mỗi nhóm sẽ có ý nghĩa cụ thể, đôi khi chỉ mang ý nghĩa chung chung và các lập viên có cái nhìn tổng quan về kết quả của request.
Tuy nhiên, có nhiều status code khi browser nhận về, browser sẽ thực hiện hành vi khác nhau, ví dụ như 301
, 302
sẽ chuyển hướng.
Bảng tóm tắt ý nghĩa các HTTP Status Code
Thực tế có nhiều rất http status code, nhiều status code không được sử dụng nhiều nên chính mình đôi khi cũng không nhớ hết.
Mình thường dụng bảng tóm tắt ý nghĩa các HTTP Status Code để tham khảo nhanh mỗi khi cần.
Mã Trạng Thái | Mô Tả Ngắn | Vị Trí Trong Tài Liệu |
---|---|---|
100 | Continue - Yêu cầu đã được nhận, client có thể tiếp tục gửi phần thân của yêu cầu. | Chi tiết |
101 | Switching Protocols - Server đồng ý chuyển đổi giao thức. | Chi tiết |
102 | Processing - Server đang xử lý yêu cầu nhưng chưa hoàn thành. | Chi tiết |
103 | Early Hints - Gợi ý tài nguyên để tải trước mà chưa có kết quả chính thức. | Chi tiết |
200 | OK - Yêu cầu đã thành công. | Chi tiết |
201 | Created - Yêu cầu đã thành công và một tài nguyên mới đã được tạo ra. | Chi tiết |
202 | Accepted - Yêu cầu đã được chấp nhận để xử lý, nhưng chưa hoàn thành. | Chi tiết |
203 | Non-Authoritative Information - Thông tin trả về không trực tiếp từ server gốc. | Chi tiết |
204 | No Content - Yêu cầu thành công nhưng không có nội dung nào để trả về. | Chi tiết |
205 | Reset Content - Yêu cầu thành công nhưng cần reset form nhập liệu. | Chi tiết |
206 | Partial Content - Server chỉ gửi một phần của tài nguyên. | Chi tiết |
207 | Multi-Status - Trả về nhiều trạng thái cho nhiều tài nguyên khác nhau. | Chi tiết |
300 | Multiple Choices - Yêu cầu có nhiều đáp ứng có thể, và một lựa chọn cụ thể cần được thực hiện. | Chi tiết |
301 | Moved Permanently - Tài nguyên đã di chuyển vĩnh viễn đến URL mới. | Chi tiết |
302 | Found - Tài nguyên được tìm thấy tạm thời tại một URL khác. | Chi tiết |
303 | See Other - Tài nguyên nên được truy cập tại một URL khác thông qua GET. | Chi tiết |
304 | Not Modified - Tài nguyên không có sự thay đổi nào kể từ lần yêu cầu cuối. | Chi tiết |
305 | Use Proxy - Phải sử dụng proxy để truy cập tài nguyên. | Chi tiết |
306 | Switch Proxy - Không được sử dụng nữa, đã bị loại bỏ. | Chi tiết |
307 | Temporary Redirect - Tài nguyên đã di chuyển tạm thời đến một URL khác, nhưng giữ nguyên phương thức yêu cầu. | Chi tiết |
308 | Permanent Redirect - Tài nguyên đã di chuyển vĩnh viễn đến một URL khác, nhưng giữ nguyên phương thức yêu cầu. | Chi tiết |
400 | Bad Request - Yêu cầu không hợp lệ được gửi bởi client. | Chi tiết |
401 | Unauthorized - Yêu cầu cần xác thực. | Chi tiết |
402 | Payment Required - Dự kiến cho tương lai, chưa chuẩn hóa. | Chi tiết |
403 | Forbidden - Yêu cầu không được phép, dù đã xác thực. | Chi tiết |
404 | Not Found - Không tìm thấy tài nguyên yêu cầu. | Chi tiết |
405 | Method Not Allowed - Phương thức yêu cầu không được phép. | Chi tiết |
406 | Not Acceptable - Không thể trả về dữ liệu theo định dạng yêu cầu. | Chi tiết |
407 | Proxy Authentication Required - Cần xác thực với proxy. | Chi tiết |
408 | Request Timeout - Server hết thời gian chờ yêu cầu từ client. | Chi tiết |
409 | Conflict - Yêu cầu làm xung đột với trạng thái tài nguyên hiện tại. | Chi tiết |
410 | Gone - Tài nguyên đã bị xóa và không thể phục hồi. | Chi tiết |
411 | Length Required - Yêu cầu độ dài không được phép mà không có Content-Length . | Chi tiết |
412 | Precondition Failed - Điều kiện tiên quyết không được thỏa mãn. | Chi tiết |
413 | Payload Too Large - Payload của yêu cầu quá lớn để xử lý. | Chi tiết |
414 | URI Too Long - URI của yêu cầu quá dài. | Chi tiết |
415 | Unsupported Media Type - Kiểu phương tiện không được hỗ trợ trong yêu cầu. | Chi tiết |
416 | Range Not Satisfiable - Không thể đáp ứng phần Range yêu cầu. | Chi tiết |
417 | Expectation Failed - Expect header không được đáp ứng. | Chi tiết |
418 | I'm a teapot - Trò đùa trong RFC 2324. | Chi tiết |
421 | Misdirected Request - Yêu cầu hướng sai máy chủ. | Chi tiết |
422 | Unprocessable Entity - Dữ liệu không hợp lệ mặc dù đúng định dạng. | Chi tiết |
428 | Precondition Required - Thiếu điều kiện cần thiết trong yêu cầu. | Chi tiết |
429 | Too Many Requests - Client đã gửi quá nhiều yêu cầu. | Chi tiết |
431 | Request Header Fields Too Large - Các trường header quá lớn. | Chi tiết |
500 | Internal Server Error - Lỗi không xác định từ server. | Chi tiết |
501 | Not Implemented - Server không hỗ trợ chức năng yêu cầu. | Chi tiết |
502 | Bad Gateway - Server acting as a gateway không nhận phản hồi từ upstream. | Chi tiết |
503 | Service Unavailable - Server quá tải hoặc đang bảo trì. | Chi tiết |
504 | Gateway Timeout - Không nhận phản hồi từ upstream server trong khoảng thời gian quy định. | Chi tiết |
505 | HTTP Version Not Supported - Server không hỗ trợ phiên bản HTTP của yêu cầu. | Chi tiết |
HTTP Status Code 1xx: Informational
1xx là nhóm status code dùng để thông báo cho client rằng request của nó đã được nhận và đang xử lý. Client không cần phải làm gì cả.
100 Continue
HTTP này thông báo rằng client đã gửi request phần đầu tiên(Header) và server đã chấp nhận request và sẵn sàng body để xử lý dữ liệu, thường điều này xảy ra khi body rất lớn và client có thể gửi phần tiếp theo(Body).
Ví dụ: Request từ client:
POST /upload HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 1024
Expect: 100-continue
Trong trường hợp này:
Client đang thông báo rằng yêu cầu của nó có một body với kích thước (1024 bytes) và mong đợi phản hồi 100 Continue từ Server trước khi gửi phần thân dữ liệu.
Server sẽ response :
HTTP/1.1 100 Continue
Sau đó, client gửi body của yêu cầu, ví dụ:
{
"fileName": "example.txt",
"fileContent": "Base64 encoded content here..."
}
Kết quả cuối cùng:
HTTP/1.1 201 Created
Content-Type: application/json
{
"status": "success",
"fileId": "12345"
}
Thực tế, status code này hiện tại ít được sử dụng.
101 Switching Protocols
Hiện tại HTTP/2 và HTTP/3 đã rất phổ biến và được sử dụng. Tuy nhiên không phải server nào cũng hỗ trợ HTTP/2 hoặc HTTP/3.
Vì vậy mặc định client sẽ request đến server là HTTP/1.1, nếu server hỗ trợ HTTP/2 hoặc HTTP/3 thì server sẽ trả về status code 101 Switching Protocols để thông báo cho client chuyển sang giao thức mới.
Sau đó client sẽ gửi lại request theo giao thức mới.
Thực tế, status code này ít được sử dụng bởi các lập trình viên bình thường, thường các framework sẽ tự động xử lý.(Được handler bởi người viết framework, lib)
Thực tế, status code này hiện tại ít được sử dụng.
Sử dụng tls để Switching Protocols khi ACK https
Có 1 cách nữa mà đa số được sử dụng là tại thời điểm bắt tay tls handshake, client sẽ gửi lên danh sách protocol mà nó hỗ trợ, server sẽ chọn ra protocol phù hợp và trả về cho client.
102 Processing
Status code này thông báo rằng server đang xử lý request nhưng chưa hoàn thành. Client có thể chờ đợi hoặc gửi request khác.
Thực tế, status code này hiện tại ít được sử dụng.
103 Early Hints
Status code này được sử dụng để thông báo cho client rằng client cần tài trước một số thông tin trước khi nhận response chính thức.
Ví dụ: Để hiển thị một HTMl thì client cần tải trước một số file css, js, image... để hiển thị đúng.
Thực tế, status code này hiện tại ít được sử dụng.
HTTP Status Code 2xx: Success
HTTP Status Code 2xx là nhóm status code thông báo cho client rằng request của client đã được xử lý thành công.
200 OK
Status code này thông báo rằng request của client đã được xử lý thành công và thông tin được trả về trong response( Nếu có ).
201 Created
Status code này thông báo rằng request của client đã được xử lý thành công và một resource mới đã được tạo ra. Thường được sử dụng khi client gửi request POST để tạo mới một resource.
Response sẽ chứa thông tin về resource mới được tạo ra.
202 Accepted
Status code này thông báo rằng request của client đã được chấp nhận và sẽ được xử lý sau. Thường được sử dụng khi client gửi request để xử lý một công việc nào đó mà không cần phải trả về kết quả ngay lập tức.
Ví dụ: Gửi email, chạy job build, xử lý dữ liệu lớn...
Mục đích của status code này là để thông báo cho client rằng request của nó đã được chấp nhận và sẽ được xử lý sau bởi một worker khác.
Response sẽ không chứa thông tin về kết quả của request nhưng có thể sẽ chứa thông tin về job worker sẽ xử lý request.
Ví dụ bạn gửi request để xử lý một công việc nào đó, server sẽ trả về 202 Accepted và thông tin về id của task sẽ xử lý công việc đó.
203 Non-Authoritative Information
HTTP Status code này thông báo rằng request đã được xử lý thành công nhưng thông tin trả về không phải từ server gốc mà từ một server khác.
Các ứng dụng sử dụng các dịch vụ proxy hoặc cache có thể sử dụng mã 203 để chỉ ra rằng thông tin trả về không phải từ nguồn gốc mà từ một nguồn khác.
Thực tế, status code này hiện tại ít được sử dụng.
204 No Content
HTTP Status code này thông báo rằng request đã được xử lý thành công nhưng không có thông tin(Body) nào được trả về.
Tuy nhiên, đầu ra của phản hồi vẫn có thể chứa các thông tin hữu ích trong phần header, ví dụ như thông tin về các tài nguyên tiếp theo có thể được yêu cầu hoặc hướng dẫn về hành động tiếp theo.
Ví dụ với method put
hoặc delete
client chỉ cần biết là đã thành công.
205 Reset Content
HTTP Status code này thông báo rằng client cần reset lại form mà nó đã gửi đi. Thường được sử dụng trong trường hợp client gửi form và server xử lý thành công và cần client reset lại form submit.
Thực tế, status code này hiện tại ít được sử dụng.
206 Partial Content
HTTP Status code này thông báo rằng server đã trả về một phần dữ liệu của resource mà client yêu cầu. Thường được sử dụng khi client yêu cầu một phần dữ liệu của file lớn.
HTTP code này được sử dụng rất nhiều trong quá khứ, hiện tại 2024 thì nó đã giảm bớt.
Trong quá khứ, khi client yêu cầu một file lớn, server sẽ trả về dữ liệu theo từng phần, client sẽ nhận từng phần và hiển thị dữ liệu.
Ví dụ: Khi xem video trên mạng, client sẽ yêu cầu từng phần dữ liệu của video và hiển thị chứ không cần tải toàn bộ video lên đến vài GB về.
Thực tế bây giờ kỹ thuật HLS, Dash đã phổ biến nên status code này ít được sử dụng.
207 Multi-Status
HTTP Status code này thông báo rằng request của client đã được xử lý thành công nhưng response chứa nhiều thông tin về trạng thái của các tài nguyên khác nhau.
Status này được sử dụng khi request của người dùng yêu cầu xử lý nhiều tài nguyên cùng một lúc và mỗi tài nguyên có một trạng thái khác nhau.
Ví dụ: Client gửi request để xóa nhiều file, server sẽ trả về 207 Multi-Status và thông tin về trạng thái của từng file.
Thực tế, status code này hiện tại ít được sử dụng.
HTTP Status Code 3xx: Redirection
Hiểu đơn giản HTTP Status Code 3xx là nhóm status code thông báo cho client rằng client cần thực hiện một hành động khác để hoàn thành request.
300 Multiple Choices
HTTP Status code này thông báo rằng request của client có nhiều lựa chọn để chọn. Client cần chọn một trong số các lựa chọn được trả về. Ví dụ: Client request một resource mà có nhiều phiên bản, client cần chọn một phiên bản để xem.
Thực tế, status code này hiện tại ít được sử dụng.
301 Moved Permanently
HTTP Status code này thông báo rằng request của client đã được chuyển hướng vĩnh viễn đến một URL khác. Các công cụ tìm kiếm sẽ cập nhật URL cũ thành URL mới trong index của chúng. Hiện tại HTTP Status code này vẫn được sử dụng rất nhiều, nó thường phục vụ cho việc một URL bị thay đổi hoặc một trang web bị chuyển địa chỉ.
Khi trình duyệt nhận được status code này, nó sẽ đọc header Location
và chuyển hướng đến URL mới.
302 Found (Trước đây là Moved Temporarily)
HTTP Status code này thông báo rằng request của client đã được chuyển hướng tạm thời đến một URL khác, nhưng bạn dự định sẽ phục hồi URL ban đầu sau một thời gian. Các công cụ tìm kiếm sẽ không thay đổi URL trong index. Thực tế 302 sẽ tương tự như 301, tuy nhiên 302 sẽ nói rằng đây chỉ là tạm thời chứ không phải vĩnh viễn.
Thực tế HTTP Status này sẽ hỗ trợ tốt với SEO, 302 sẽ cho các công cụ tìm kiếm biết rằng đây là chuyển hướng tạm thời và không cần cập nhật lại index.
Nếu bạn muốn chuyển hướng vĩnh viễn thì nên sử dụng 301.
303 See Other
HTTP Status này thông báo cho client biết rằng tài nguyên mà client yêu cầu đã được tạo và nằm ở một URL khác. Client cần gửi một request mới đến URL mới để lấy thông tin. Ví dụ sau khi submit một form thành công, chuyển hướng người dùng đến web page cảm ơn
.
Thực tế, status code này hiện tại ít được sử dụng.
304 Not Modified
HTTP Status code này thông báo rằng tài nguyên mà client yêu cầu không thay đổi từ lần cuối cùng client yêu cầu. Server sẽ trả về status code này và không trả về dữ liệu của tài nguyên. Client sẽ sử dụng cache để hiển thị dữ liệu.
Status code này thường được sử dụng khi client yêu cầu một tài nguyên mà đã được cache và không thay đổi từ lần cuối cùng client yêu cầu.
Thường sẽ kèm theo một số header để biểu thị hash hoặc thời gian thay đổi lần cuối của tài nguyên.
305 Use Proxy
HTTP Status code này thông báo rằng client cần sử dụng proxy để truy cập tài nguyên. Thường được sử dụng trong trường hợp client không thể truy cập trực tiếp tài nguyên mà cần thông qua proxy.
HTTP code này cần được trả về từ chính Origin Server, không được trả về từ Proxy. Và khi trả về sẽ kèm theo url của proxy thông qua header Location
.
Thực tế, status code này hiện tại ít được sử dụng.
306 Switch Proxy
Thực tế status code này không được sử dụng nữa, nó chỉ tồn tại trong HTTP/1.1 draft.
307 Temporary Redirect
Tuong tự như 302, status code này thông báo rằng request của client đã được chuyển hướng tạm thời đến một URL khác. Client cần gửi một request mới đến URL mới để lấy thông tin.
Tuy nhiên, khác với 302, client sẽ không thay đổi phương thức request, nghĩa là nếu client gửi request POST thì sẽ vẫn gửi POST.
Nguyên nhân dẫn đến vấn đề này là ở phiên bản HTTP/1, HTTP STATUS 302 cũng mô tả giữ nguyên method, nhưng nhiều trinh trình duyệt chuyển hướng request POST thành GET.
Vì vậy ở phiên bản HTTP/1.1, 307 được tạo ra để giữ nguyên method của request và phân biên rõ ràng với 302.
308 Permanent Redirect
Tương tự vấn đề của 302 và 307, 308 được tạo ra để giữ nguyên method của request và phân biên rõ ràng với 301.
HTTP Status code này thông báo rằng request của client đã được chuyển hướng vĩnh viễn đến một URL khác giống với 301 nhưng giữ nguyên method của request khi chuyển hướng.
HTTP Status Code 4xx: Client Error
Status code 4xx là nhóm status code thông báo cho client rằng request của client không hợp lệ hoặc không thể xử lý. Nguyên nhân có thể là do client gửi request không hợp lệ(Thiếu dữ liệu...etc...), không có quyền truy cập tài nguyên hoặc tài nguyên không tồn tại.
400 Bad Request
HTTP Status code này thông báo rằng request của client không hợp lệ. Thường được sử dụng khi client gửi request không đúng cú pháp, thiếu dữ liệu. Ví dụ: Client gửi request POST nhưng không có body nhưng server yêu cầu body.
401 Unauthorized
HTTP Status code này thông báo rằng client cần xác thực để truy cập tài nguyên. Thường được sử dụng khi client gửi request mà không có thông tin xác thực hoặc thông tin xác thực không hợp lệ.
Ví dụ khi client gửi request mà không gửi token ở trong header, hoặc token không hợp lệ.
Như mô tả ở trên, khi API yêu cầu xác thực, client cần gửi thông tin xác thực lên cho server, nếu không gửi hoặc gửi thông tin không hợp lệ thì server sẽ trả về 401 Unauthorized
.
402 Payment Required
Code này không được sử dụng, nó được tạo ra để sử dụng trong tương lai và chưa được chuẩn hóa.
403 Forbidden
HTTP Status code này thông báo rằng client không có quyền truy cập tài nguyên. Thường được sử dụng khi client gửi request mà không có quyền truy cập tài nguyên.
Ví dụ một tài khoản đã pass 401 nhưng khi kiểm tra quyền để truy cập tài nguyên thì không có, khi đó HTTP Status code 403 sẽ được trả về.
404 Not Found
HTTP Status code này thông báo rằng server không tìm thấy tài nguyên mà client yêu cầu. Thường được sử dụng khi client yêu cầu một tài nguyên không tồn tại.
Lưu ý: Có thể là không tồn tại, hoặc đã bị xóa cứng hoặc đã bị xóa mềm.
405 Method Not Allowed
HTTP Status code này thông báo rằng phương thức request của client không được phép trên tài nguyên. Thường được sử dụng khi client gửi request với phương thức không được hỗ trợ.
Với 405 là server nhận biết được method client yêu ầu là gì, tuy nhiên server không hỗ trợ method đó. Hiểu đơn là server nhận biết được method nhưng cố tình không hỗ trợ.
Ví dụ server chỉ hỗ trợ method GET cho endpoint /resource
nhưng client gửi request với method POST thì server sẽ trả về 405 Method Not Allowed.
406 Not Acceptable
HTTP Status code này thông báo rằng server không thể trả về dữ liệu theo định dạng mà client yêu cầu. Thường được sử dụng khi client yêu cầu dữ liệu ở một định dạng mà server không hỗ trợ.
Khi gửi request, client cần gửi thông tin về định dạng mà nó muốn nhận dữ liệu thông qua header Accept
và có thể thêm Accept-Encoding
và Accept-Language
.
Đây là định nghĩa data type mà client muốn nhận dữ liệu từ server.
Nếu server không hỗ trợ định dạng mà client yêu cầu thì server sẽ trả về 406 Not Acceptable.
407 Proxy Authentication Required
Khi client sử dụng một proxy trung gian để truy câp tài nguyên đến server, và proxy yêu cầu client cần xác thực để truy cập tài nguyên.
Client cần gửi kèm thông tin xác thực của proxy. Nếu client không gửi thông tin xác thực hoặc thông tin xác thực không hợp lệ thì server sẽ trả về 407 Proxy Authentication Required.
408 Request Timeout
HTTP Status code này thông báo rằng server đã hết thời gian xử lý request của client. Thường được sử dụng khi server không thể xử lý request của client trong khoảng thời gian quy định.
Ví dụ server sẽ xử lý request của client trong 30s, nếu server không xử lý xong trong 30s thì sẽ trả về 408 Request Timeout.
409 Conflict
Như cái tên cũng đã mô tả, HTTP Status code này thông báo rằng request của client làm xung đột với trạng thái hiện tại của tài nguyên.
Thường được sử dụng khi client gửi request mà xung đột với trạng thái hiện tại của tài nguyên.
Ví dụ: Khi client lấy về thông tin của tài nguyên và thông tin tài nguyên có trạng thái pending
, sau đó client gửi request để cập nhật thông tin tài nguyên thành reject
nhưng thông tin tài nguyên đã được cập nhật bởi một client khác và trạng thái của tài nguyên đã là approved
.
Khi đó server sẽ trả về 409 Conflict.
Điều này để bảo vệ dữ liệu của tài nguyên khỏi việc bị ghi đè do nhầm lẫn.
410 Gone
HTTP Status code này thông báo rằng tài nguyên mà client yêu cầu đã không còn sẵn. Thường được sử dụng khi tài nguyên đã bị xóa và không thể phục hồi hoặc tồn tại lại trong tương lai bằng bất kỳ cách nào.
Tuy nhiên hiện tại ít được sử dụng, thường sử dụng 404 Not Found thay thế.
Hiện tại ít được sử dụng, thường sử dụng 404 Not Found thay thế. Và coi đó là một cách thông báo rằng tài nguyên không tồn tại.
411 Length Required
HTTP Status code này thông báo rằng server yêu cầu client cung cấp thông tin về độ dài của body trong request.
Thường được sử dụng khi client gửi request mà không có thông tin về độ dài của body.
Server cần thông tin về độ dài để xác định có đủ khả năng xử lý request hay không. Ví dụ khi server xác định có thể xử lý thì trả về 100 Continue
để client tiếp tục gửi body.
412 Precondition Failed
HTTP code này thông báo rằng một hoặc nhiều điều kiện tiên quyết để server xử lý request của client không được client gửi lên trên header hoặc không thỏa mãn.
Một số condition có thể là If-Match
, If-None-Match
, If-Modified-Since
, If-Unmodified-Since
, If-Range
, If-None-Match
. Các preconditions này được sử dụng để xác minh rằng client chỉ thực hiện hành động nếu trạng thái tài nguyên đáp ứng các tiêu chí xác định, giúp tránh các xung đột hoặc lỗi không mong muốn.
413 Payload Too Large
HTTP Status code này thông báo rằng server không thể xử lý request của client vì body của request quá lớn.
Mô server sẽ có thể có các giới hạn kích thước về dữ liệu body của request, nếu client gửi request với body quá lớn và server không thể sử lý thì server sẽ trả về 413 Payload Too Large.
414 URI Too Long
HTTP Status code này thông báo rằng server không thể xử lý request của client vì URI của request quá dài.
Một số server có thể có giới hạn về độ dài của URI, nếu client gửi request với URI quá dài thì server sẽ trả về 414 URI Too Long.
ví dụ:
shell
curl 'https://thanhlv.com/?a=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'
Response : Error: URI Too Long%
415 Unsupported Media Type
HTTP Status code này thông báo rằng server không hỗ trợ kiểu dữ liệu của request của client. Ví dụ client gửi request với Content-Type là XML nhưng server chỉ hỗ trợ JSON chỉ server sẽ trả về 415 Unsupported Media Type.
416 Range Not Satisfiable
HTTP Status code này thông báo rằng server không thể thực hiện yêu cầu của client vì giá trị của Range header không hợp lệ. Nguyên nhân có thể là giá trị của Range header không hợp lệ về format hoặc nằm ngoài phạm vi của tài nguyên.
417 Expectation Failed
HTTP Status code này thông báo rằng server không thể thực hiện yêu cầu của client vì Expect header không hợp lệ hoặc không thể được thực hiện.
Expect header thường được sử dụng để yêu cầu server thực hiện một số hành động trước khi client gửi request thực sự. Ví dụ, client có thể yêu cầu server xác nhận rằng nó hỗ trợ 100-continue trước khi gửi dữ liệu.
Khi server không hỗ trợ Expect hoặc không thể thực hiện yêu cầu, nó sẽ trả về 417 Expectation Failed.
418 I'm a teapot
Bắt đầu từ mộ trò đùa trong RFC 2324, HTTP Status code 418 I'm a teapot không có ý nghĩa thực tế và không nên được sử dụng trong ứng dụng thực tế.
421 Misdirected Request
HTTP Status code này thông báo rằng server không thể xử lý yêu cầu của client vì yêu cầu đã được gửi đến một máy chủ không đúng.
Điều này có thể xảy ra khi client gửi yêu cầu hoặc bị directed đến một máy chủ không đúng trong một cụm máy chủ hoặc khi máy chủ không thể xác định máy chủ đích của yêu cầu.
Thực tế HTTP Code này cũng ít được sử dụng.
422 Unprocessable Entity
HTTP Status code này thông báo rằng server không thể xử lý yêu cầu của client vì dữ liệu của yêu cầu không hợp lệ.
Với HTTP code này, server vẫn đọc hiểu được format và syntax của request là chính xác, tuy nhiên không thể sử lý do dữ liệu không hợp lệ.
Ví dụ đơn giản, server yêu cầu client gửi lên một Json có trường content
được encode base64, nhưng client gửi lên một Json chứa trường content
không phải là base64.
Thực tế HTTP CODE này ít được sử dụng.
428, 429, 431 và 511
Thực tế trong RFC của HTTP/1.1 không có 3 HTTP code này, 3 HTTP code này là một phần mở rộng của HTTP/1.1 được viết trong RFC 6585
428 Precondition Required
HTTP Code này hơi giống 412 Precondition Failed
, tuy nhiên HTPP code này là server yêu cầu có các điều kiện nhưng client không gửi lên.
Ví dụ server yêu cầu client gửi lên If-Match
nhưng client không gửi lên.
429 Too Many Requests
Đây là mộ trong những HTTP code phổ biến nhất, thông báo rằng client đã gửi quá nhiều yêu cầu trong một khoảng thời gian nhất định.
Thông thường server sẽ cấu hình một số giới hạn về số lượng request mà client có thể gửi trong một khoảng thời gian nhất định( Rate limit
), nếu client vượt quá giới hạn này, server sẽ trả về 429 Too Many Requests.
Rate limit thường được sử dụng để bảo vệ server khỏi các cuộc tấn công DDoS hoặc giúp server duy trì hiệu suất tốt hơn.
Hoặc đôi khi gói cước dịch vụ bạn đăng ký với hệ thống có giới hạn số lượng request mà bạn có thể gửi trong một khoảng thời gian nhất định.
431 Request Header Fields Too Large
Giống với 413 hoặc 414, HTTP code này thông báo rằng server không thể xử lý yêu cầu của client vì kích thước của các trường header quá lớn.
Khi có một số trường header quá lớn, server sẽ trả về 431 Request Header Fields Too Large.
Tuy nhiên HTTP Code này ít được sử dụng trong thực tế. Đa số các hệ thống sử dụng lun 400 cho điều này.
Ví dụ:
shell
curl --location 'https://thanhlv.com' \
--header 'test: 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'
HTTP Status Code 5xx: Server Error
Status code 5xx là nhóm mã lỗi HTTP dành cho các lỗi phát sinh từ phía server khi xử lý yêu cầu của client. Khi client nhận được mã lỗi 5xx, nó biết rằng lỗi không phải từ phía client mà từ phía server.
500 Internal Server Error
Đây là mã lỗi phổ biến nhất trong nhóm 5xx là lỗi ám ảnh của anh em theo BE, thông báo rằng server gặp lỗi không xác định khi xử lý yêu cầu của client.
Có nhiều lỗi khác nhau có thể dẫn đến mã lỗi 500, bao gồm lỗi lập trình, lỗi cấu hình, lỗi hệ thống, lỗi cơ sở dữ liệu, v.v.
Trên server các lập trình viên vẫn chưa handler được lỗi này, nó sẽ trả về mã lỗi 500 để thông báo cho client biết rằng server gặp lỗi không xác định và báo cáo lỗi đến quản trị viên hệ thống.
501 Not Implemented
Mã lỗi 501 Not Implemented thông báo rằng server không hỗ trợ method được yêu cầu trong yêu cầu của client.
Nó tương tự như mã lỗi 405 Method Not Allowed, nhưng 501 được sử dụng khi server không xác định được method yêu cầu có hỗ trợ hay không.
Còn 405 được sử dụng khi server biết method và hiểu method, nhưng không cho phép sử dụng method đó. Còn 501 được sử dụng khi server không biết, không hiểu method đó.
Một ví dụ phổ biến là hệ thống proxy.
502 Bad Gateway
Mã lỗi 502 Bad Gateway thông báo rằng server hoạt động như một cổng thông tin (gateway) hoặc proxy, nhưng không thể nhận phản hồi từ server upstream.
Khi client nhận được mã lỗi 502, nó biết rằng client đã kết nối đến proxy hoặc gateway nhưng khi proxy hoặc gateway cố gắng kết nối đến server upstream, nó không thể nhận được phản hồi từ server upstream. (Client ---Done---> Proxy ---Error---> Server Upstream)
503 Service Unavailable
Đây cũng là mã lỗi phổ biến trong nhóm 5xx, thông báo rằng server không thể xử lý yêu cầu của client tại thời điểm đó.
Vấn đề có thể là do server quá tải, bảo trì, hoặc không thể xử lý yêu cầu vì lý do khác.
Thông thường khi gặp mã lỗi 503, client có thể cấu hình thử lại sau một khoảng thời gian nhất định, ví dụ sau 1 phút.
504 Gateway Timeout
Mã lỗi 504 Gateway Timeout thông báo rằng server hoạt động như một cổng thông tin (gateway) hoặc proxy, nhưng không thể nhận phản hồi từ server upstream trong khoảng thời gian quy định.
Một ví dụ phổ biến là có cấu hình timeout chờ xử lý yêu cầu từ proxy đến server upstream, nếu server upstream không phản hồi trong khoảng thời gian timeout, proxy sẽ trả về mã lỗi 504.
505 HTTP Version Not Supported
Mã lỗi 505 HTTP Version Not Supported thông báo rằng server không hỗ trợ phiên bản HTTP được yêu cầu trong yêu cầu của client.
Ví dụ bạn gửi yêu cầu với HTTP/1.0 nhưng server chỉ hỗ trợ HTTP/1.1, server sẽ trả về mã lỗi 505.
Tổng kết
Các HTTP Status Codes không chỉ giúp chúng ta hiểu rõ hơn về giao tiếp giữa client và server, mà còn giúp cải thiện chức năng của ứng dụng web bằng cách phản hồi chính xác những gì đang xảy ra trong các yêu cầu HTTP.
Các mã trạng thái cung cấp thông tin quý giá về kết quả của yêu cầu mà không cần xử lý chi tiết nội dung trả về, giúp các nhà phát triển xác định và xử lý các vấn đề một cách hiệu quả.
Một số lưu ý
Chọn mã trạng thái phù hợp: Đảm bảo sử dụng đúng mã status để phản ánh chính xác tình trạng request và phản hồi. Việc này giúp người dùng và các nhà phát triển khác hiểu rõ hơn về kết quả của các yêu cầu HTTP.
Tránh sử dụng các mã lỗi ít gặp: Một số mã như 418 hoặc 306 không cần thiết trong các ứng dụng thực tế và chỉ nên dùng mã nào được cập nhật theo chuẩn mới nhất của HTTP.
Kiểm tra và xử lý lỗi kịp thời: Sử dụng các mã 5xx để thông báo lỗi từ phía server và cần thêm tính năng ghi log để xử lý lỗi hiệu quả hơn nhằm tránh ảnh hưởng đến trải nghiệm người dùng.
Chào cảm ơn
Cảm ơn bạn đã theo dõi blog này. Hy vọng rằng thông qua các thông tin và ví dụ được cung cấp, bạn có thể ứng dụng hiệu quả hơn trong việc phát triển và duy trì các dịch vụ web của mình.
Hãy tiếp tục quay lại để cập nhật thêm những kiến thức mới và mọi ý kiến đóng góp của bạn đều là vô cùng quý giá đối với chúng tôi!