Lỗi ERR_EMPTY_RESPONSE là gì? Cách khắc phục

Advertisement
ERR_EMPTY_RESPONSE là gì?
ERR_EMPTY_RESPONSE là trang lỗi của Chrome và Edge với nội dung "Trang này không hoạt động. example.com không gửi bất kỳ dữ liệu nào." (This page isn't working. example.com didn't send any data.) Trong Chromium, đây là mã lỗi mạng -324, được định nghĩa là: "Máy chủ đã đóng kết nối mà không gửi bất kỳ dữ liệu nào" (The server closed the connection without sending any data).
Trình duyệt đã đi xa hơn so với hầu hết các lỗi kết nối khác. Địa chỉ đã được phân giải, kết nối đã mở, và trình duyệt đã gửi yêu cầu. Sau đó máy chủ, hoặc thứ gì đó đứng trước nó, đóng kết nối với một phản hồi rỗng: không mã trạng thái, không header, không trang. Mã nguồn Chromium chỉ dùng lỗi này cho một kết nối mới bị đóng với 0 byte. Khi một kết nối cũ đang được tái sử dụng bị đóng, Chrome sẽ âm thầm thử lại.
Vì yêu cầu đã thực sự được gửi đến, ERR_EMPTY_RESPONSE thường chỉ ra phía máy chủ: một ứng dụng bị crash khi đang xử lý yêu cầu, một quy tắc cố ý ngắt kết nối, hoặc một dịch vụ chấp nhận kết nối nhưng phía sau không có gì. Một vài nguyên nhân trên chính máy tính của bạn cũng có thể gây ra lỗi này.
Nguyên nhân gây ra lỗi ERR_EMPTY_RESPONSE
| Nguyên nhân | Ở đâu | Dấu hiệu |
|---|---|---|
| Ứng dụng bị crash hoặc bị kill khi đang xử lý yêu cầu | Máy chủ | Lỗi với mọi người, thường trên một trang nặng |
| Quy tắc ngắt kết nối (nginx return 444, WAF, chống bot) | Máy chủ | Chỉ lỗi với một số khách truy cập, IP hoặc user agent |
| Chuyển tiếp cổng nhưng phía sau không có gì lắng nghe (Docker, load balancer) | Máy chủ / lập trình viên | Cổng mở nhưng mọi yêu cầu đều trả về rỗng |
| http:// gửi đến cổng chỉ hỗ trợ HTTPS | Lập trình viên | Hoạt động với https://, lỗi với http:// |
| VPN, proxy hoặc tính năng quét HTTPS của phần mềm diệt virus | Thiết bị của bạn | Chỉ lỗi trên thiết bị hoặc mạng của bạn |
| Yêu cầu hoặc header quá lớn đối với máy chủ | Máy chủ | Lỗi sau khi đăng nhập hoặc khi có nhiều cookie |
Advertisement
Cách 1: Tải lại trang và thử chế độ Ẩn danh
Nếu máy chủ khởi động lại đúng lúc không may, tải lại trang sau vài giây là đủ. Nếu lỗi lặp lại, hãy mở trang trong cửa sổ Ẩn danh (Ctrl + Shift + N, Mac Cmd + Shift + N). Chế độ Ẩn danh khởi động không có cookie và không có tiện ích mở rộng, nên nó nhanh chóng cho bạn biết liệu thứ gì đó được lưu trong trình duyệt có liên quan hay không.
Sau đó kiểm tra xem trang web có bị sập với mọi người không. Công cụ Kiểm Tra Header HTTP của DNS Robot yêu cầu trang từ máy chủ của chúng tôi: nếu chúng tôi nhận được phản hồi bình thường, vấn đề nằm giữa bạn và trang web. Nếu chúng tôi cũng không nhận được gì, chính trang web đang bị lỗi.
Cách 2: Tắt VPN, proxy và tính năng quét HTTPS
Bất cứ thứ gì nằm ở giữa các kết nối của bạn đều có thể chấp nhận yêu cầu rồi đóng nó mà không chuyển phản hồi về:
VPN: ngắt kết nối hoàn toàn rồi tải lại trang.
Proxy: trên Windows 11, Cài đặt → Mạng & Internet → Proxy → tắt Sử dụng máy chủ proxy (Use a proxy server). Trên Mac, Cài đặt hệ thống → Mạng → kết nối của bạn → Chi tiết… → Proxy.
Quét HTTPS của phần mềm diệt virus: chỉ tắt tính năng quét web hoặc quét HTTPS (thường có tên HTTPS scanning, Web Shield hoặc SSL/TLS protocol filtering) rồi tải lại. Nếu cách đó khắc phục được, hãy thêm ngoại lệ cho trang web và bật lại tính năng quét.
Advertisement
Cách 3: Xóa dữ liệu của trang web và tắt tiện ích mở rộng
Cookie quá lớn hoặc bị hỏng có thể khiến máy chủ bỏ yêu cầu thay vì trả lời, và điều này thường chỉ xuất hiện dưới dạng lỗi sau khi bạn đăng nhập. Hãy xóa cookie của trang đó: nhấp vào biểu tượng bên trái thanh địa chỉ → Cookie và dữ liệu trang web (Cookies and site data) (hoặc Cài đặt trang web) → xóa dữ liệu, rồi đăng nhập lại.
Tiếp theo, tắt tất cả tiện ích mở rộng tại chrome://extensions và tải lại. Bật lại từng cái một để tìm tiện ích gây xung đột, thường là trình chặn quảng cáo, công cụ bảo vệ quyền riêng tư hoặc bất cứ thứ gì chỉnh sửa yêu cầu.
Cách 4: Xóa bộ nhớ đệm DNS và đặt lại network stack
Nếu mọi trang web đều trả về phản hồi rỗng trên một máy tính, hãy đặt lại cấu hình mạng của máy đó. Trên Windows, chạy các lệnh dưới đây trong Command Prompt quyền quản trị viên rồi khởi động lại máy. Trên Mac, hãy xóa bộ nhớ đệm DNS, sau đó xóa mạng Wi-Fi và thêm lại.
ipconfig /flushdns
netsh winsock reset
netsh int ip reset
ipconfig /release
ipconfig /renewHãy thử cả một mạng khác, chẳng hạn dữ liệu di động trên điện thoại. Nếu trang web hoạt động ở đó, một bộ lọc trên mạng bạn thường dùng (trường học, nơi làm việc hoặc ISP) có thể đang cắt kết nối.
Advertisement
ERR_EMPTY_RESPONSE trên localhost và Docker
Lập trình viên thường gặp lỗi này nhất trên chính máy của mình. Các nguyên nhân thường gặp:
Ứng dụng trong container Docker lắng nghe trên 127.0.0.1. Bên trong container,
127.0.0.1có nghĩa là "chỉ container này", nên cơ chế chuyển tiếp cổng của Docker không có gì để kết nối tới và trình duyệt nhận được phản hồi rỗng (hoặc, tùy thiết lập, kết nối bị reset). Hãy cho ứng dụng lắng nghe trên0.0.0.0bên trong container, ví dụnext dev -H 0.0.0.0,vite --host 0.0.0.0,flask run --host=0.0.0.0hoặcuvicorn main:app --host 0.0.0.0.Ánh xạ cổng của container không khớp.
-p 8080:3000chuyển tiếp cổng 8080 của bạn đến cổng 3000 bên trong container. Nếu ứng dụng thực ra lắng nghe trên cổng 5000, mọi yêu cầu sẽ trả về rỗng.http:// trên cổng chỉ hỗ trợ HTTPS. Một số máy chủ chờ TLS trên một cổng và đơn giản là ngắt kết nối khi HTTP thuần đến. Hãy thử
https://localhost:8443thay vìhttp://.Dev server bị crash khi đang xử lý yêu cầu. Kiểm tra cửa sổ terminal nơi nó đang chạy. Một exception hoặc lỗi hết bộ nhớ ngay lúc đó chính là câu trả lời.
# Tái hiện lỗi mà không cần trình duyệt
curl -v http://localhost:8080/
# "Empty reply from server" = kết nối đã được chấp nhận, không có gì được gửi lại
# Container công khai những cổng nào, và cái gì đang lắng nghe bên trong?
docker ps --format "table {{.Names}}\t{{.Ports}}"
docker exec -it <container> sh -c "netstat -tlnp 2>/dev/null || ss -tlnp"Dành cho chủ website: Vì sao máy chủ gửi phản hồi rỗng
Crash và tiến trình bị kill do hết bộ nhớ. Nếu tiến trình xử lý yêu cầu chết, kết nối sẽ đóng mà không có gì được gửi. Kiểm tra log ứng dụng và
dmesg -T | grep -i "killed process"để tìm dấu vết của OOM killer (cơ chế diệt tiến trình khi hết bộ nhớ) trên Linux, đặc biệt với các trang nặng và khi tải tệp lên.Cố ý ngắt kết nối. Lệnh đặc biệt
return 444;của nginx đóng kết nối mà không gửi bất kỳ phản hồi nào, và thường được dùng để chặn bot xấu hoặc hostname không xác định. Nếu một quy tắc như vậy khớp với khách truy cập thật (một quy tắc user agent hoặc GeoIP quá rộng), họ sẽ thấy ERR_EMPTY_RESPONSE, hoặc ERR_HTTP2_PROTOCOL_ERROR trên các kết nối HTTP/2, nơi nginx reset luồng thay vào đó. WAF, bộ giới hạn tốc độ và dịch vụ chống bot cũng có thể làm điều tương tự.Chuyển tiếp cổng và load balancer không có backend. Một listener chấp nhận kết nối nhưng phía sau không có máy chủ nào hoạt động bình thường có thể đóng kết nối với phản hồi rỗng. Hãy kiểm tra trạng thái sức khỏe của target và đảm bảo cổng backend khớp.
Hết thời gian chờ thì đóng thay vì trả lời. Hãy để các yêu cầu chạy lâu trả về lỗi đúng chuẩn (chẳng hạn 504) thay vì âm thầm đóng socket, để khách truy cập và hệ thống giám sát biết chuyện gì đã xảy ra.
Yêu cầu quá lớn. Header hoặc cookie rất lớn có thể khiến một số máy chủ bỏ yêu cầu. Hãy giữ cookie nhỏ gọn.
# Có quy tắc nào ngắt kết nối không?
sudo grep -rn "return 444" /etc/nginx/
# Kiểm tra từ bên ngoài, theo cách khách truy cập kết nối
curl -sv https://yourdomain.com/ -o /dev/nullAdvertisement
ERR_EMPTY_RESPONSE khác gì các lỗi tương tự
| Lỗi | Mã | Điều đã xảy ra |
|---|---|---|
| ERR_EMPTY_RESPONSE | -324 | Yêu cầu đã gửi, kết nối bị đóng với 0 byte trả về |
| ERR_CONNECTION_CLOSED | -100 | Bị đóng trước khi kịp gửi yêu cầu, thường trong quá trình bắt tay HTTPS |
| ERR_CONNECTION_RESET | -101 | Kết nối bị cắt đột ngột bằng gói TCP reset |
| 502 Bad Gateway | HTTP | Proxy đã trả lời, nhưng ứng dụng upstream của nó bị lỗi |
Hướng dẫn liên quan: ERR_CONNECTION_CLOSED, ERR_CONNECTION_RESET, 502 Bad Gateway và 500 Internal Server Error. Để kiểm tra xem cổng của máy chủ có chấp nhận kết nối từ bên ngoài không, hãy dùng Kiểm Tra Cổng.
Máy chủ có trả lời khi kiểm tra từ bên ngoài mạng của bạn không?
Công cụ Kiểm Tra Cổng của DNS Robot kiểm tra xem cổng 443 hoặc 80 của một tên miền có chấp nhận kết nối từ máy chủ của chúng tôi không. Kết hợp với Kiểm Tra Header HTTP để xem máy chủ có gửi phản hồi thực sự hay không.
Thử Kiểm Tra CổngAdvertisement
Câu hỏi thường gặp
Nó có nghĩa là trình duyệt đã kết nối đến máy chủ và gửi yêu cầu, rồi máy chủ đóng kết nối mà không gửi lại dữ liệu nào: không mã trạng thái, không header, không trang. Trong Chromium, đây là mã lỗi mạng -324, hiển thị là "Trang này không hoạt động. example.com không gửi bất kỳ dữ liệu nào."