Một câu hỏi tương tự được đăng ở đây: What's an appropriate HTTP status code to return by a REST API service for a validation failure?Mã trạng thái HTTP thích hợp là gì nếu người dùng cố gắng đăng nhập bằng tên người dùng/mật khẩu không chính xác, nhưng định dạng đúng?
Câu trả lời trong chủ đề trên khẳng định rằng "Ví dụ nếu URI là phải có một ngày theo tiêu chuẩn ISO-8601 và bạn thấy rằng đó là sai định dạng hoặc đề cập đến tháng 31, sau đó bạn sẽ trả về HTTP 400. Ditto nếu bạn mong đợi XML được định dạng tốt trong một thực thể và nó không phân tích cú pháp. "
Tuy nhiên, điều gì sẽ xảy ra nếu người dùng gửi dữ liệu được định dạng chính xác? Điều này có nghĩa là, người dùng đã gửi một chuỗi ký tự/văn bản thuần túy cho tên người dùng và mật khẩu (hoàn toàn hợp lệ cho ứng dụng của tôi). Vấn đề duy nhất là mật khẩu không khớp với tên người dùng. Trong trường hợp này, 400 sẽ không chính xác vì nó là cú pháp hoàn toàn hợp lệ và được tạo đúng.
401 sẽ không chính xác (như được đề xuất ở đây: Which HTTP status code to say username or password were incorrect?) vì người dùng không cố gắng truy cập bất kỳ trang nào, anh chỉ đơn giản là cố đăng nhập và nhập dữ liệu không khớp.
Nếu bạn nhìn lại bài đăng đầu tiên mà tôi liên kết, câu trả lời thứ hai cho biết 422 là câu trả lời đúng (và có vẻ đúng với tôi), tuy nhiên, tôi đang sử dụng Django Rest Framework và 422 không phải là một phần của mã trạng thái (danh sách các mã trạng thái là một phần của DRF có thể tìm thấy tại đây: http://www.django-rest-framework.org/api-guide/status-codes/#client-error-4xx)
404 cũng không đúng vì dữ liệu được chấp nhận thành công và không bị từ chối.
Với điều đó đã nói, câu trả lời đúng thực sự cần được sử dụng là gì?
bạn nói đúng, 401 là những gì tôi nên sử dụng. Wow, không thể tin rằng tôi đã bỏ lỡ phần thứ hai của lời giải thích. Cảm ơn. Tôi sẽ đánh dấu câu hỏi này là chính xác trong 8 phút khi nó cho phép tôi. – user2719875
Tiêu chuẩn bị damned, tôi nghĩ 418 vẫn là đáp ứng tốt nhất – sjagr
Từ phần bạn đang trích dẫn, phản hồi 401 cho biết yêu cầu ** không được áp dụng **. Do đó, không có lần đăng nhập ** nào được thực hiện, bởi vì ủy quyền là cần thiết ở cấp độ thấp hơn trước tiên. Điều này thường có thể xảy ra khi một số lớp bảo mật được lồng nhau và là một phản hồi hợp lệ để chỉ ra yêu cầu auth với lớp ngoài trước khi cố gắng xác thực với lớp bên trong. – spectras