2010-08-19 36 views
12

Vì vậy, hãy gửi một vài tiêu đề trạng thái khác nhau trong API của tôi bao gồm 404, 409, 201, 302 và các loại tương tự. Bây giờ tôi đang gặp sự cố với 401 Unauthorized. Tôi hiện đang gửi nó nếu người dùng không đăng nhập (toàn bộ API được quản lý quyền) hoặc nếu người dùng không đáp ứng các yêu cầu truy cập cụ thể cho tài nguyên cụ thể đang được truy lục/sửa đổi.Trạng thái HTTP riêng biệt không đăng nhập và không được ủy quyền trong RESTful API

Bây giờ, tôi cũng kiểm soát ứng dụng giao diện người dùng (ứng dụng jQuery/HTML) và tôi muốn phân biệt giữa hai trường hợp cho 401. Có trạng thái riêng biệt nào tôi nên sử dụng để không đăng nhập không? Là cách tốt nhất để xử lý nó để gửi nội dung cơ thể cùng với tiêu đề?

+0

Câu hỏi tương tự như https://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses –

Trả lời

20

Bạn nên sử dụng 403 để cho biết rằng người dùng không được phép truy cập tài nguyên. Sử dụng 401 để cho biết rằng người dùng cần cung cấp thông tin xác thực giống như bạn hiện đang sử dụng thông tin đăng nhập. Xem mô tả của 401403here.

3

Như đã nói, bạn nên sử dụng 403 khi bạn đã xác thực người dùng nhưng người dùng không được phép làm những gì cô ấy yêu cầu. ví dụ. bạn có thể cho phép GET'ing một tài nguyên, nhưng không cho phép DELETE hoặc PUT.

  • 401 sẽ không chính xác vì nó cơ bản nói rằng: "Tôi không nhận ra những thông tin"
  • 403 là đúng vì nó nói rằng "Bạn không được phép thực hiện điều này"

Trong mọi trường hợp, nội dung phản hồi phải luôn chứa nhiều thông tin hơn, even when it's an error response. Điều này cho phép khách hàng thoát ra ngoài, hy vọng chuyển tiếp (sử dụng liên kết nhúng) hoặc cung cấp đủ thông tin về cách tiến hành (ví dụ: "Hồ sơ của tôi cho biết bạn không có quyền xóa XXX, vui lòng liên hệ với quản trị viên hệ thống của bạn và yêu cầu FOOBAR permission ").

+0

Nó sẽ không phải là "không được phép FOOBAR XXX"? – Hello71

+0

"Không có quyền xóa XXX" được cho là phản hồi cho yêu cầu DELETE, vì vậy có. Nếu bạn đáp ứng yêu cầu PUT 403, bạn sẽ viết nó một cách thích hợp. Điều FOOBAR nên đã đọc "vai trò FOOBAR". Vấn đề là nói với người dùng cách họ có thể giải quyết vấn đề, nhưng đó (thiết kế thông báo lỗi) là một chủ đề khác! – mogsie

Các vấn đề liên quan