Những điểm chính cần nắm
Middleware là gì?
Middleware là các đoạn code được đặt giữa quá trình tiếp nhận request và trả response của một ứng dụng. Khi client gửi request đến server, middleware sẽ là nơi đầu tiên tiếp nhận request đó để:
Sau khi xử lý xong, middleware có thể trả response ngay lập tức hoặc chuyển tiếp request sang middleware tiếp theo trong chuỗi xử lý.

Ứng dụng của middleware trong thực tế
Ngày nay, hầu hết các Web Framework hiện đại đều xem middleware là thành phần cốt lõi trong kiến trúc hệ thống. Việc sử dụng middleware giúp:
Một ví dụ phổ biến là kiểm soát truy cập. Các trang quản trị (admin) thường được bảo vệ bằng middleware để đảm bảo chỉ người dùng có quyền phù hợp mới có thể truy cập, trong khi người dùng thông thường sẽ bị chặn hoặc chuyển hướng.

Cách thức hoạt động của middleware
Khi có một HTTP request được gửi đến:
-
Web server (ví dụ: Kestrel) tiếp nhận request
-
Server khởi tạo một HttpContext
-
Request được chuyển vào middleware đầu tiên trong chuỗi xử lý (pipeline)
-
Mỗi middleware:
Quá trình này tiếp tục cho đến middleware cuối cùng trong pipeline.
Khi request được xử lý xong, response sẽ được trả ngược lại theo thứ tự middleware ngược chiều, cho phép mỗi middleware có cơ hội:
Điểm đặc biệt là bất kỳ middleware nào cũng có thể chủ động dừng pipeline, chỉ cần không chuyển request sang middleware tiếp theo. Điều này rất hữu ích trong các trường hợp như:

Phân loại middleware
Tùy theo framework và kiến trúc hệ thống, middleware thường được chia thành một số nhóm phổ biến như:
Cách tạo middleware tùy biến
Một ví dụ thực tế khi sử dụng middleware tùy biến là tự động chuyển hướng người dùng truy cập từ thiết bị di động sang một subdomain hoặc phiên bản mobile riêng biệt, đồng thời vẫn giữ nguyên các tham số truy vấn (query string).
Mặc dù hầu hết website hiện nay đều sử dụng thiết kế responsive, nhưng trong một số trường hợp:
Việc xây dựng middleware xử lý chuyển hướng theo thiết bị sẽ giúp tối ưu hiệu năng và trải nghiệm người dùng mà không cần can thiệp sâu vào từng controller hay route.