diff --git a/docs/vi/docs/tutorial/middleware.md b/docs/vi/docs/tutorial/middleware.md
new file mode 100644
index 000000000..20984b556
--- /dev/null
+++ b/docs/vi/docs/tutorial/middleware.md
@@ -0,0 +1,70 @@
+# Middleware
+
+Bạn có thể thêm middleware vào ứng dụng **FastAPI**.
+
+Một "middleware" là một hàm mà làm việc với mỗi **request** trước khi nó được xử lý bởi bất kỳ *path operation* nào. Đồng thời cũng tương tự với mỗi **response** trước khi trả về.
+
+* Nó tiếp nhận mỗi **request** mà đến ứng dụng của bạn.
+* Nó có thể thực hiện một số thay đổi với **request** hoặc chạy một số đoạn mã cần thiết.
+* Nó sau đó chuyển tiếp **request** để phần còn lại của ứng dụng xử lí (bởi một *path operation* nào đó).
+* Nó tiếp nhận **response** được tạo ra bởi ứng dụng (bởi một *path operation* nào đó).
+* Nó có thể thực hiện một số thay đổi với **response** hoặc chạy một số đoạn mã cần thiết.
+* Sau đó nó trả về **response**.
+
+/// note | Chi tiết kỹ thuật
+
+Nếu bạn có dependencies với `yield`, mã thoát sẽ chạy *sau* middleware.
+
+Nếu có bất kỳ task nền (sẽ được thêm vào tài liệu sau), chúng sẽ chạy *sau* tất cả middleware.
+
+///
+
+## Tạo một middleware
+
+Để tạo một middleware, bạn dùng decorator `@app.middleware("http")` phía trên một hàm.
+
+Middleware nhận:
+
+* `request`.
+* Một hàm `call_next` sẽ nhận `request` làm tham số.
+ * Hàm này sẽ chuyển tiếp `request` đến *path operation* tương ứng.
+ * Sau đó nó trả về `response` được tạo ra bởi *path operation* tương ứng.
+* Bạn có thể chỉnh sửa thêm `response` trước khi trả về.
+
+{* ../../docs_src/middleware/tutorial001.py hl[8:9,11,14] *}
+
+/// tip
+
+Lưu ý rằng các header tùy chỉnh có thể được thêm bằng cáchsử dụng tiền tố 'X-'.
+
+Nhưng nếu bạn có header tùy chỉnh mà bạn muốn một client trong trình duyệt có thể thấy, bạn cần thêm chúng vào cấu hình CORS ([CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank}) bằng tham số `expose_headers` được tài liệu trong Starlette's CORS docs.
+
+///
+
+/// note | Chi tiết kỹ thuật
+
+Bạn cũng có thể sử dụng `from starlette.requests import Request`.
+
+**FastAPI** cung cấp nó như một tiện ích cho bạn, lập trình viên. Nhưng nó đến trực tiếp từ Starlette.
+
+///
+
+### Trước và sau `response`
+
+Bạn có thể thêm mã để chạy với `request`, trước khi bất kỳ *path operation* nào nhận được nó.
+Bạn cũng có thể làm điều tương tự với `response` sau khi nó được tạo ra, trước khi trả nó về.
+Ví dụ, bạn có thể thêm một header tùy chỉnh `X-Process-Time` chứa thời gian tính bằng giây mà nó đã mất để xử lí request và tạo ra response:
+
+{* ../../docs_src/middleware/tutorial001.py hl[10,12:13] *}
+
+/// tip
+
+Ở đây chúng ta sử dụng `time.perf_counter()` thay vì `time.time()` vì nó chính xác hơn cho các trường hợp này. 🤓
+
+///
+
+## Các middleware khác
+
+Bạn có thể đọc thêm về các middleware khác trong [Hướng dẫn sử dụng nâng cao: Middleware nâng cao](../advanced/middleware.md){.internal-link target=_blank}.
+
+Bạn sẽ đọc về cách xử lí CORS với một middleware trong phần tiếp theo.