1. HTTP Status Code là gì?
HTTP Status Code (Mã trạng thái HTTP) là một mã ba chữ số mà máy chủ gửi lại cho client để chỉ ra trạng thái của yêu cầu (request) sau khi yêu cầu này được phía máy chủ xử lý. Status-Line là một phần của phản hồi HTTP, chứa thông tin về phiên bản HTTP, mã trạng thái, và lý do (reason phrase), cú pháp của Status-Line là: <HTTP-Version> <Status-Code> <Reason-Phrase> CRLF
HTTP Status Code được chia làm 5 nhóm chính:
- 1xx Informational (Thông tin): Cung cấp thông tin ở mức giao thức truyền tải.
- 2xx Success (Thành công): Cho biết yêu cầu từ client đã được nhận, hiểu và chấp nhận thành công.
- 3xx Redirection (Chuyển hướng): Cho biết cần thực hiện thêm một hành động nào đó để hoàn thành yêu cầu.
- 4xx Client Error (Lỗi từ phía client): Cho biết có lỗi xảy ra do yêu cầu không đúng từ phía client.
- 5xx Server Error (Lỗi từ phía server): Cho biết server gặp lỗi khi xử lý yêu cầu và không thể hoàn thành được.
Các mã trạng thái 2xx và 3xx được xem là thành công và 4xx và 5xx là lỗi.
2. Danh sách HTTP Status Code phổ biến
Status Code | Reason Phrase | Ý Nghĩa | Ví Dụ |
---|---|---|---|
200 | OK | Yêu cầu đã được xử lý thành công. | Bạn truy cập trang chủ của một trang web và nội dung được tải về đúng như mong đợi. |
201 | Created | Yêu cầu đã được xử lý và một tài nguyên mới đã được tạo ra thành công. | Bạn đăng ký tài khoản mới trên một trang web và tài khoản của bạn được tạo ra thành công. |
202 | Accepted | Yêu cầu đã được nhận và đang được xử lý bất đồng bộ. | Bạn gửi một biểu mẫu đăng ký và nhận được thông báo rằng yêu cầu của bạn đang được xử lý. |
204 | No Content | Phản hồi không có nội dung nào, thường được dùng khi yêu cầu đã được xử lý nhưng không cần gửi dữ liệu trả về. | Bạn gửi yêu cầu xóa một mục và không nhận được phản hồi nào vì nó đã được xóa thành công. |
301 | Moved Permanently | Tài nguyên yêu cầu đã được chuyển vĩnh viễn đến một URI mới. | Bạn truy cập vào một trang web cũ và được tự động chuyển hướng đến một trang web mới. |
303 | See Others | Kết quả của yêu cầu có thể được tìm thấy tại một URI khác. | Bạn gửi một biểu mẫu và được chuyển hướng đến trang xác nhận. |
304 | Not Modified | Tài nguyên không có sự thay đổi kể từ lần yêu cầu cuối cùng. | Bạn tải lại trang web nhưng trang không thay đổi, nên trình duyệt sử dụng bản lưu trong bộ nhớ đệm. |
307 | Use Proxy | Yêu cầu cần được truy cập qua một URI proxy. | Bạn cố gắng truy cập một tài nguyên nhưng cần phải thông qua một proxy. |
400 | Bad Request | Yêu cầu có lỗi cú pháp hoặc thông tin không đúng, nên không thể hiểu được bởi máy chủ. | Bạn gửi một yêu cầu với dữ liệu bị lỗi và máy chủ không thể xử lý. |
401 | Unauthorized | Yêu cầu không được ủy quyền do thiếu hoặc sai thông tin xác thực. | Bạn cố gắng truy cập một trang nhưng không có/sai mật khẩu. |
403 | Forbidden | Máy chủ hiểu yêu cầu nhưng từ chối xử lý vì lý do bảo mật hoặc chính sách. | Bạn cố gắng truy cập một trang mà bạn không có quyền truy cập. |
404 | Not Found | Máy chủ không tìm thấy tài nguyên nào tương ứng với URI yêu cầu. | Bạn nhập sai địa chỉ URL và nhận được thông báo trang không tồn tại. |
405 | Method Not Allowed | Phương thức được chỉ định trong yêu cầu không được phép sử dụng cho tài nguyên này. | Bạn cố gắng gửi dữ liệu bằng phương thức POST đến một API chỉ cho phép GET. |
408 | Request Timeout | Máy chủ không nhận được yêu cầu hoàn chỉnh trong khoảng thời gian cho phép. | Kết nối của bạn bị chậm và yêu cầu bị ngắt do hết thời gian chờ. |
409 | Conflict | Yêu cầu không thể được xử lý do mâu thuẫn với trạng thái hiện tại của tài nguyên. | Bạn cố gắng cập nhật một tài liệu, nhưng có sự thay đổi xung đột từ người khác. |
414 | Request URI Too Long | Địa chỉ URI trong yêu cầu dài hơn giới hạn cho phép của máy chủ. | Bạn cố gắng gửi một URL quá dài và nhận được thông báo lỗi. |
415 | Unsupported Media Type | Định dạng yêu cầu không được máy chủ hỗ trợ. | Bạn gửi dữ liệu hình ảnh với định dạng không hỗ trợ (ví dụ như .bmp) lên server. |
429 | Too Many Requests | Client gửi quá nhiều yêu cầu trong khoảng thời gian giới hạn. | Bạn làm mới trang quá nhiều lần trong một thời gian ngắn và bị tạm khóa. |
500 | Internal Server Error | Máy chủ gặp lỗi không mong đợi và không thể xử lý yêu cầu. | Bạn truy cập một trang web và gặp lỗi máy chủ do vấn đề bên trong. |
501 | Not Implemented | Máy chủ không hỗ trợ chức năng cần thiết để xử lý yêu cầu. | Bạn gửi một yêu cầu với một phương thức mà máy chủ không hỗ trợ. |
502 | Bad Gateway | Máy chủ mà gateway hoặc proxy đang cố gắng truy cập để lấy dữ liệu có thể bị quá tải hoặc lỗi và không thể phản hồi kịp thời. | Trang web bạn truy cập gặp lỗi gateway từ máy chủ khác. |
503 | Service Unavailable | Máy chủ tạm thời quá tải hoặc đang bảo trì, không thể xử lý yêu cầu. | Bạn truy cập một trang web nhưng máy chủ đang bảo trì và không thể phục vụ yêu cầu. |
504 | Gateway Timeout | Máy chủ không nhận được phản hồi kịp thời từ máy chủ khác (upstream server) | Trang web bạn truy cập quá chậm do phản hồi chậm từ máy chủ khác. |
3. Hướng dẫn trả về Status Code trong Reponse
Khi yêu cầu được xử lý thành công, bạn có thể trả về một phản hồi với mã trạng thái 200.
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/success', methods=['GET'])
def success_response():
data = {
'message': 'Yêu cầu đã được xử lý thành công.',
'data': {
'key': 'value'
}
}
return jsonify(data), 200
if __name__ == '__main__':
app.run(debug=True)
Khi tài nguyên không được tìm thấy, bạn có thể trả về một phản hồi với mã trạng thái 404
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/resource/<int:id>', methods=['GET'])
def get_resource(id):
resources = {
1: 'Resource 1',
2: 'Resource 2'
}
if id in resources:
return jsonify({'resource': resources[id]}), 200
else:
return jsonify({'error': 'Resource not found'}), 404
if __name__ == '__main__':
app.run(debug=True)
Khi máy chủ gặp lỗi phản hồi từ một máy chủ phụ trợ (upstream server), bạn có thể trả về một phản hồi với mã trạng thái 502.
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/proxy', methods=['GET'])
def proxy_request():
# Giả lập việc gọi một dịch vụ phụ trợ
backend_response = None # Giả sử phản hồi từ backend là None do lỗi
if backend_response is None:
return jsonify({'error': 'Bad Gateway. Backend server failed to respond.'}), 502
else:
return jsonify({'data': backend_response}), 200
if __name__ == '__main__':
app.run(debug=True)
4. Kết luận
Trong lập trình web và phát triển ứng dụng, việc hiểu rõ và sử dụng chính xác các mã trạng thái HTTP (HTTP Status Codes) là vô cùng quan trọng. Mã trạng thái không chỉ giúp xác định kết quả của một yêu cầu HTTP mà còn cung cấp thông tin chi tiết về việc xử lý yêu cầu đó, giúp người dùng và lập trình viên hiểu rõ hơn về tình trạng và nguyên nhân của các vấn đề có thể xảy ra.
Các bài viết liên quan tại Blog 200Lab:
Bài viết liên quan
Giới thiệu Kiến trúc Backend for Frontend (BFF)
Nov 16, 2024 • 10 min read
Flask là gì? Hướng dẫn tạo Ứng dụng Web với Flask
Nov 15, 2024 • 7 min read
Webhook là gì? So sánh Webhook và API
Nov 15, 2024 • 8 min read
Spring Boot là gì? Hướng dẫn Khởi tạo Project Spring Boot với Docker
Nov 14, 2024 • 6 min read
Two-Factor Authentication (2FA) là gì? Vì sao chỉ Mật khẩu thôi là chưa đủ?
Nov 13, 2024 • 7 min read
Test-Driven Development (TDD) là gì? Hướng dẫn thực hành TDD
Nov 13, 2024 • 6 min read