Đã bao giờ bạn tự hỏi tại sao máy chủ dev của bạn luôn chạy trên localhost:3000 hoặc localhost:5173?
Những cổng này có lịch sử thú vị bắt nguồn từ thói quen của các nhà phát triển qua nhiều thập kỷ, từ Java và Python đến Node.js và Vite.
Hãy cùng khám phá câu chuyện đằng sau chúng.
Nội dung chính
💡 Cổng (Port) Là Gì?
Hãy tưởng tượng máy tính của bạn giống như một tòa nhà văn phòng, mỗi cổng là một cánh cửa được đánh số dẫn đến một “phòng” (hoặc dịch vụ) cụ thể.
Khi bạn truy cậplocalhost:3000, về cơ bản bạn đang gõ cửa số 3000 và hỏi,
“Này, bạn có thể cho tôi xem ứng dụng của tôi không?”
Có tổng cộng 65,535 cửa (cổng) có thể.
Đây là cách chúng được phân nhóm:
| Phạm vi | Mục đích | Ví dụ |
|---|---|---|
| 0–1023 | Hệ thống / Được dành riêng | HTTP(80),HTTPS(443),SSH(22) |
| 1024–49151 | Người dùng / Đã đăng ký | 3000, 8000, 8080 |
| 49152–65535 | Động / Riêng tư | Kết nối tạm thời của Hệ điều hành |
Vì vậy, đúng vậy, cổng3000chỉ là một trong số hàng chục nghìn lựa chọn hợp lệ.
⚙️ Cổng 3000
– Mặc định của Node.js
Khi Node.js và Express.js bùng nổ vào đầu những năm 2010, tài liệu chính thức đã sử dụng đoạn mã này:
app.listen(3000, () => console.log('Server running on port 3000'));
Một dòng mã đó đã định hình cả một thế hệ nhà phát triển.
Các hướng dẫn, khóa học bootcamp, và boilerplate đã sao chép nó nguyên văn.
Sau đó React xuất hiện…
và tái sử dụng nó.
Next.js xuất hiện…
và lại tái sử dụng nó.
💬 Sự thật thú vị:
Không có lý do đặc biệt nào cho cổng3000
– nó chỉ được chọn một cách ngẫu nhiên và chưa được sử dụng.
Nhưng sự quen thuộc rất mạnh mẽ.
Giờ đây, 3000 là cổng “Hello World” không chính thức của phát triển web.
Cập nhật (23 tháng 10, 2025):
Một vài độc giả chỉ ra rằng việc sử dụng cổng 3000 thực ra bắt nguồn từ Ruby on Rails, và các framework như Express.js sau này đã áp dụng cùng quy ước.
Cảm ơn các bình luận, phát hiện tuyệt vời!
🐍 Cổng 8000
– Cổ điển của Python
Rất lâu trước Node.js, các nhà phát triển Python đã khởi chạy máy chủ cục bộ với:
python3 -m http.server
Và cổng mặc định mà lệnh đó sử dụng là gì?
👉 8000
Không có lý do sâu xa, chỉ đơn giản là một con số tròn, an toàn trên 1024 mà không yêu cầu quyền root.
Các framework như Django cũng áp dụng nó:
Starting development server at http://127.0.0.1:8000/
Vì vậy, đối với các nhà phát triển Python,8000đã trở thành con số mặc định cho “Tôi chỉ đang thử nghiệm cái gì đó ở local.”
☕ Cổng 8080
– Cổng Huyền thoại của Java
Trở lại những năm 1990, chạy một máy chủ web trên cổng 80 (cổng HTTP chính thức) yêu cầu quyền truy cập root.
Vì vậy, các nhà phát triển Java làm việc trên Apache Tomcat và Jetty đã chọn một thứ gì đó thông minh:
80 => 8080 (gấp đôi tám mươi)
Nó trông tương tự, hoạt động mà không cần quyền admin, và trở thành sự thay thế HTTP hoàn hảo.
Cho đến ngày nay, các máy chủ Java (như Spring Boot) vẫn mặc định là8080.
Giờ đây nó là biểu tượng của “công việc backend nghiêm túc”.
⚡ Cổng 5173
– Thế hệ Vite
Tiến nhanh đến những năm 2020.
Evan You (người tạo ra Vue.js) giới thiệu Vite, một công cụ build siêu nhanh cho các framework frontend.
Họ cần một cổng mặc định và thay vì chọn một con số nhàm chán, họ đã thêm Easter egg này:
51 = “VI” (Số La Mã ‘V’ => 5)
73 = “TE”
5173 => “VITE”
Chạynpm run devtrong một dự án Vite, và bạn sẽ thấy:
VITE v5.0 ready in 220 ms Local: http://localhost:5173/
Nó mang tính kỹ thuật, thông minh và dễ nhớ và đó là lý do tại sao bây giờ bạn sẽ thấy 5173 ở khắp mọi nơi.
🧠 Bạn Có Đang Sử Dụng Localhost “Sai”?
Không sai, nhưng có lẽ bạn đang tự giới hạn bản thân.
Nhiều nhà phát triển bám lấy cổng 3000 và hoảng hốt khi họ gặp:
Error: Port 3000 already in use
Trong thực tế, bạn có thể an toàn sử dụng bất kỳ cổng nào lên đến 49151.
Hãy thử một cái gì đó thú vị:
npm run dev -- --port=42069
hoặc trong Vite:
vite --port=13337
Bạn sẽ tránh được xung đột và kiếm được điểm cộng cho sự am hiểu kỹ thuật.
🕰️ Một Chút Lịch Sử Phát Triển Thú Vị
Mỗi cổng kể một câu chuyện:
8080
– Giải pháp thay thế HTTP thông minh của Java
8000
– Sự đơn giản thiết thực của Python
3000
– Truyền thống ngẫu nhiên của Node
5173
– Easter egg tự tham chiếu của Vite
Từ những năm 1990 đến nay, những con số này đã âm thầm định hình cách hàng triệu nhà phát triển làm việc mỗi ngày.
✨ Điều Rút Ra
Lần tới khi bạn khởi chạy một máy chủ dev và thấy:
Local: http://localhost:3000/
Hãy nhớ rằng bạn đang chạm vào một mảnh lịch sử phát triển trải dài qua nhiều thập kỷ đổi mới.
Vì vậy, lần tới khi cổng 3000 bận, đừng chỉ dừng tiến trình.
Hãy chọn một số khác.
Thậm chí có thể biến nó thành cổng đặc trưng của bạn.
😉
Bạn có thể an toàn sử dụng bất kỳ cổng nào từ 1024 đến 49151
– 3000 không phải là lựa chọn duy nhất!







![[Tự học C++] Số dấu phẩy động(float, double,…) trong C++](https://cafedev.vn/wp-content/uploads/2019/12/cafedevn_c_develoment-100x70.jpg)

