---
title: "Danh sách HTTP Status Code và Hướng dẫn sử dụng"
description: ""
canonical: "https://200lab.io/blog/http-status-code"
published: "2024-08-25T06:59:34Z"
updated: "2026-08-21T07:17:47Z"
authors: ["Hướng nội"]
tags: ["Backend"]
reading_minutes: 8
access: "public"
---

## 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`

![](https://assets.200lab.io/images/2024/12/05/http-status-code-http-status-code-la-gi-fa621bf1e1f319370c84.webp)

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 **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:

- [IDE là gì? Những công cụ IDE phổ biến nhất hiện nay](</blog/ide-la-gi>)
- [JWT là gì? Các thành phần chính trong JWT](</blog/jwt-la-gi>)
- [SOLID là gì? Lập trình Hướng đối tượng hiệu quả hơn với Nguyên lý SOLID](</blog/solid-la-gi>)
- [SSL/ TLS và HTTPS là gì? Giải pháp Bảo mật cho kết nối Web an toàn](</blog/ssl-tls-https-la-gi>)
