Tôi đã đọc qua RFC 2617 và không thể tìm thấy ở đó hoặc bất kỳ nơi nào khác, dấu phân cách là gì nếu nhiều lược đồ được hỗ trợ. Ví dụ, giả sử cả Basic và Digest đều được hỗ trợ. Tôi hiểu rằng nó có thể xuất hiện theo cách này:Dấu phân cách cho WWW-Xác thực cho nhiều sơ đồ là gì?
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
WWW-Authenticate: Digest
Nhưng tôi cũng đã đọc rằng cả hai có thể được liệt kê như là một dòng, nhưng không ai thấy một ví dụ hoặc mô tả những gì delimiter để sử dụng. Tôi đã nhìn thấy cảnh báo rằng dấu phẩy có thể được sử dụng trong vòng một chương trình duy nhất:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest param1="foo", param2="bar"
Tôi cũng đã đọc rằng nếu dấu phẩy được sử dụng trong một chương trình, đó là chương trình khác phải được đặt trên dòng riêng biệt. Vì vậy, tôi tưởng tượng trong trường hợp trên nếu chúng tôi thêm Cơ bản, nó sẽ xuất hiện như sau:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest param1="foo", param2="bar"
WWW-Authenticate: Basic
Đơn giản là đủ. Nhưng bây giờ giả sử bạn chỉ có một dòng
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Scheme stuff, morestuff, more stuff
Đó là cái nào? Đó có phải là danh sách lược đồ được phân tách bằng dấu phẩy hoặc là một sơ đồ, với một vài tham số không?
Vâng, có vẻ như WinInet không xử lý nhiều lược đồ xác thực trên một tiêu đề duy nhất. Tôi không hồi hộp về nó, nhưng tôi nghĩ rằng tôi có thể chạy dịch vụ trên nhiều thiết bị đầu cuối, một dịch vụ chỉ hỗ trợ Basic và một chỉ hỗ trợ Thương lượng và yêu cầu khách hàng thử dịch vụ chỉ hỗ trợ Thoả thuận trước tiên và nếu điều đó không thành công , chuyển sang Basic. – bpeikes
Sử dụng tài nguyên khác cho một loại lược đồ xác thực khác có vẻ không hữu ích đối với tôi. Sau khi tất cả, bạn muốn mã hóa tiêu đề trong một phản hồi '401 trái phép ', nếu khách hàng cố truy cập một tài nguyên cụ thể chưa được xác thực. Ngoài ra: Khái niệm về các điểm cuối cho thấy sự thiếu hiểu biết về kiến trúc REST của HTTP. Trên web, chúng ta có các điểm vào. – aef