Facebook Pixel

Danh sách HTTP Status Code và Hướng dẫn sử dụng

25 Aug, 2024

Danh sách HTTP Status Code và Hướng dẫn sử dụng

Mục Lục

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:

  1. 1xx Informational (Thông tin): Cung cấp thông tin ở mức giao thức truyền tải.
  2. 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.
  3. 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.
  4. 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.
  5. 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 2xx3xx được xem là thành công 4xx5xxlỗ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.

Python
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

Python
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.

Python
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

Lập trình backend expressjs

xây dựng hệ thống microservices
  • Kiến trúc Hexagonal và ứng dụngal font-
  • TypeScript: OOP và nguyên lý SOLIDal font-
  • Event-Driven Architecture, Queue & PubSubal font-
  • Basic scalable System Designal font-

Đăng ký nhận thông báo

Đừng bỏ lỡ những bài viết thú vị từ 200Lab