Tôi hiện đang viết một ứng dụng web bằng angularjs, nhưng tôi nghĩ câu hỏi này áp dụng cho bất kỳ khung javascript phía máy khách nào định tuyến ở phía máy khách (as angular does).Trong một ứng dụng một trang, cách đúng đắn để xử lý các URL sai (lỗi 404) là gì?
Trong ứng dụng một trang, cách phù hợp để xử lý URL sai là gì?
Nhìn vào một vài trang web lớn, tôi thấy rằng gmail sẽ chuyển hướng đến hộp thư đến nếu bạn nhập bất kỳ URL ngẫu nhiên nào bên dưới https://mail.google.com/mail/. Điều này xảy ra phía máy chủ (với mã http 300) hoặc phía máy khách, tùy thuộc vào đường dẫn sai trước hay sau ký tự #. Mặt khác, twitter hiển thị một HTTP 404 thực cho bất kỳ URL không hợp lệ nào. Tùy chọn thứ ba sẽ hiển thị 404 "mềm", trang lỗi hoàn toàn phía máy khách.
Các giải pháp này có vẻ phù hợp cho các tình huống khác nhau. Twitter muốn các liên kết tới người dùng twitter và tweet là liên kết thực, vì vậy mọi người có thể chia sẻ chúng, đăng chúng trong các bài viết, v.v., vì vậy điều quan trọng là các liên kết không hợp lệ phải được nhận dạng như vậy (nếu tôi có liên kết bị hỏng tới một tweet trong trang web của tôi, một thu thập dữ liệu đơn giản sẽ cho tôi biết điều đó). Trong Gmail, mặt khác, bạn không được mong đợi chia sẻ liên kết vào hộp thư đến của mình và tôi thậm chí không chắc chắn liệu các liên kết có thực sự vĩnh viễn/liên tục hay không: có vẻ như cập nhật url chủ yếu phục vụ mục đích điều hướng lịch sử trình duyệt trong ứng dụng một trang. Cách tiếp cận thứ ba của việc đưa ra các lỗi mềm có thể thích hợp cho các tình huống tương tự như gmail, nhưng không có trang "mặc định" hợp lý.
Sau khi giới thiệu dài này, sau đây là một số câu hỏi cụ thể:
- Có bao giờ chấp nhận để cho một trang báo lỗi "mềm" thay vì một lỗi 404, hoặc nên một ứng dụng duy nhất trang luôn chuyển hướng đến một 404 thực nếu url không hợp lệ?
- Mã của Gmail có thể hoàn toàn không có lỗi, nhưng nếu có lỗi dẫn đến các liên kết không hợp lệ kết thúc chuyển hướng trở lại hộp thư đến, điều này có thể khiến người dùng khó hiểu hơn là trang lỗi. Đối với hầu hết các ứng dụng web trên mạng, không được kiểm tra tốt như gmail, liệu trang web có tốt hơn không?
- Để triển khai 404 thực cho các ứng dụng một trang, có vẻ như cần phải sao chép logic định tuyến ở phía máy chủ. Có cách nào để khắc phục điều này?
- Khi chuyển hướng đến 404, tôi nghĩ người dùng sẽ có thể thấy URL gây ra lỗi, có thể trong thanh URL. Với api lịch sử html5, tôi nghĩ rằng điều này có thể được thực hiện bằng cách đơn giản kích hoạt tải lại trang hiện tại (với url sai), kết hợp với định tuyến phía máy chủ được đề cập ở trên. Đối với các trình duyệt không hỗ trợ tính năng này hoặc khi sử dụng ký hiệu hashbang, điều này dường như không thể. Cách tốt nhất để hỗ trợ tất cả các trình duyệt là gì?
Trang web của bạn có hoạt động không có javascript không? Bạn đang sử dụng history.pushState để cập nhật các URL qua javascripts hoặc các phân đoạn trong URL? –
Ngoài ra, tại sao bạn lại nói về * chuyển hướng * tới 404, tại sao không chỉ * hiển thị * một? –
@markus Trang web tôi hiện đang làm việc trên không hoạt động mà không có javascript. Nhưng tôi muốn liên kết sâu để làm việc, vì vậy người dùng có thể chia sẻ liên kết đến bên trong trang web (thông thường, điều này sẽ được gửi qua email). Tôi đang sử dụng ký hiệu hashbang cho bây giờ, nhưng angularjs làm cho nó dễ dàng chuyển sang html5 pushState nếu tôi muốn/cần. – jssebastian