Có một quan niệm sai lầm chung (và sử dụng sai) liên quan đến 403 Forbidden
: không nên cho đi bất cứ điều gì về những gì máy chủ nghĩ về yêu cầu. Nó được thiết kế đặc biệt để nói,
Tôi nhận được những gì bạn yêu cầu, nhưng tôi sẽ không xử lý yêu cầu, bất kể bạn thử gì. Vì vậy, hãy ngừng cố gắng.
Bất kỳ UA hoặc khách hàng nào cũng nên giải thích điều đó có nghĩa là yêu cầu sẽ không bao giờ hoạt động và đáp ứng một cách thích hợp.
Điều này có ý nghĩa đối với khách hàng xử lý các yêu cầu thay mặt cho người dùng: nếu người dùng không đăng nhập hoặc nhập sai, khách hàng xử lý yêu cầu sẽ trả lời: "Tôi xin lỗi, nhưng tôi không thể làm gì" sau lần đầu tiên nó nhận được 403
và ngừng xử lý các yêu cầu trong tương lai. Rõ ràng, nếu bạn muốn người dùng vẫn có thể yêu cầu quyền truy cập vào thông tin cá nhân của họ sau khi thất bại, đây là hành vi thù địch với người dùng.
403
ngược lại 401 Authorization Required
, điều này cho thấy rằng máy chủ sẽ xử lý yêu cầu miễn là bạn vượt qua thông tin xác thực chính xác. Đây thường là những gì mọi người nghĩ về khi họ nghe 403
.
Nó cũng trái ngược với 404 Page Not Found
điều đó, như những người khác đã chỉ ra, được thiết kế không chỉ để nói "Tôi không thể tìm thấy trang đó" mà còn đề xuất với khách hàng rằng máy chủ không đưa ra yêu cầu thành công hay thất bại cho các yêu cầu trong tương lai.
Với 401
và 404
, máy chủ không nói gì với khách hàng hoặc UA về cách họ nên tiến hành: họ có thể tiếp tục cố gắng với hy vọng nhận được phản hồi khác.
Vì vậy, 404
cách thích hợp để xử lý một trang mà bạn không muốn hiển thị cho mọi người, nhưng không muốn cho đi bất cứ điều gì về lý do tại sao bạn sẽ không hiển thị nó trong một số tình huống.
Tất nhiên, điều này giả định rằng khách hàng đưa ra yêu cầu quan tâm đến sự thất thường của RFC. Một khách hàng đủ độc hại sẽ không quan tâm đến mã trạng thái được trả về ngoại trừ theo cách ngẫu nhiên. Người ta sẽ biết đó là một trang người dùng ẩn (hoặc một trang người dùng ẩn tiềm năng) bằng cách so sánh nó với các trang người dùng đã biết khác.
Đó là, giả sử người xử lý của bạn là users/*
. Nếu tôi biết users/foo
, users/bar
và users/baaz
làm việc, máy chủ trả lại một 401
, 403
hoặc 404
cho users/quux
không có nghĩa là tôi sẽ không thử nó, đặc biệt là nếu tôi có lý do để tin rằng có là một quux
người dùng. Một kịch bản ví dụ tiêu chuẩn là Facebook: hồ sơ của tôi là riêng tư, nhưng nhận xét của tôi về hồ sơ công khai thì không. Một khách hàng độc hại biết tôi tồn tại ngay cả khi bạn quay lại 404
trang hồ sơ của tôi.
Vì vậy, mã trạng thái không dành cho các trường hợp sử dụng độc hại, chúng dành cho các máy khách chơi theo luật. Và đối với những khách hàng đó, một 401
hoặc một 404
yêu cầu là phù hợp nhất.