2009-03-29 40 views
23

Tôi đã có một tình huống với một ứng dụng dựa trên web nội bộ lớn chạy ASP.NET 3.5 trên IIS6 tạo ra 401 phản hồi "Không được phép", tiếp theo là 200 phản hồi "Ok" (được trình bày bởi Fiddler). Tôi biết lý do tại sao điều này xảy ra (xác thực tích hợp buộc trình duyệt gửi lại bằng chứng xác thực) nhưng tôi đang tìm kiếm một số suy nghĩ về cách giảm thiểu hoặc xóa bỏ tình huống. Ứng dụng được đề cập đang chạy trong WAN với một số người dùng gặp độ trễ lên đến 250ms để buộc một yêu cầu tiếp theo có thể có tác động đáng kể đến thời gian tải trang, đặc biệt khi có một số danh sách thả xuống xếp tầng trên trang tạo.Loại bỏ các phản hồi 401 "Không được phép" theo sau là 200 phản hồi "Ok"

Người dùng ứng dụng nằm trong môi trường máy tính được quản lý để cơ chế buộc trình duyệt gửi thông tin xác thực về yêu cầu đầu tiên (điều này thậm chí có thể?) Có thể có được từ phối cảnh triển khai. Điều này sẽ hoạt động đối với các trang yêu cầu danh tính của người dùng nhưng đối với các tài nguyên không yêu cầu xác thực (WebResource.axd, ScriptResource.axd và một số dịch vụ web tùy chỉnh), cho phép xác thực ẩn danh có thể thực hiện được. Tôi đã xem xét việc xác định điều này trên cơ sở từng vị trí trong web.config nhưng kết quả đã được trộn lẫn (vẫn còn một số phản hồi 401).

Tôi đánh giá cao bất kỳ hướng dẫn nào về "thực tiễn tốt nhất" để xử lý tình huống này. Có rất nhiều tài nguyên để xác định sự cố nhưng không có tài nguyên nào tôi tìm thấy cung cấp giải pháp khả thi.

Cảm ơn!

Chỉnh sửa: Tài nguyên không yêu cầu xác thực (nghĩa là dịch vụ web được sử dụng cho danh sách thả xuống xếp tầng) có thể được yêu cầu ẩn danh bằng cách thêm mục nhập vị trí vào cấu hình web nhưng tôi chưa tìm thấy câu trả lời cho tài nguyên đã xác thực.

+0

Trình duyệt nào họ đang sử dụng? Hầu hết các trình duyệt luôn gửi thông tin đăng nhập xác thực http cơ bản. Câu trả lời có thể phụ thuộc vào trình duyệt. – recursive

+0

Trình duyệt là IE6 với một số người dùng hiện đang được di chuyển sang IE7. –

Trả lời

15

Thật không may đây là một artifact của HTTP NTLM authentication scheme.

Tóm lại, trình duyệt (Internet Explorer hoặc cách khác) không biết rằng nó cần xác thực cho đến khi nó bị trả về với phản hồi 401 chứa tiêu đề phản hồi WWW-Authenticate.

Trong trường hợp WWW-Authenticate: NTLM - đủ phiền toái - yêu cầu hai số 401 phản hồi trên một kết nối liên tục để hoàn thành và quá trình này phải được lặp lại khi kết nối liên tục HTTP bị đóng. Vì vậy, ngay cả khi bạn có thể yêu cầu trình duyệt bắt đầu một yêu cầu mù quáng khi thử NTLM, thì không thể xóa ít nhất một phản hồi 401 khỏi giao dịch.

Tôi nghĩ rằng đặt cược tốt nhất của bạn sẽ là để tối đa hóa lượng thời gian mà các kết nối liên tục được mở khi không hoạt động.

+0

Kiểm tra cài đặt IIS. http://msdn.microsoft.com/en-us/library/aa347472.aspx Bạn có thể chơi với các cài đặt này để giảm 401 yêu cầu .. Hãy cẩn thận về các lựa chọn của bạn .. AuthPersistNonNTLM, authPersistSingleRequest – batspy

0

Tôi tin rằng bạn có thể thuyết phục Firefox tự động gửi thông tin xác thực NTLM tới tập hợp các miền thuộc danh sách trắng thông qua cài đặt "about: config" - sử dụng cài đặt "network.automatic-ntlm-auth.trusted-uris". Tôi đã không thử điều này bản thân mình mặc dù. Tôi không chắc là có tương đương với Internet Explorer không.

Thật không may nếu bạn đang sử dụng một cái gì đó khác như Kerberos có dường như không thể là một cách để tránh 401.

+0

Cảm ơn BRH, tiếc là sự phụ thuộc là trên IE6 và 7. –

+2

Đặt 'network.automatic-ntlm-auth.trusted-uris' như bạn mô tả không cho phép Firefox xác thực mà không yêu cầu người dùng cho thông tin đăng nhập miền, nhưng nó không giải quyết "vấn đề" của mẫu 401-401-200. Đó là một phần của xác thực NTLM và sẽ luôn xảy ra, bất kể cài đặt trình duyệt. – hmqcnoesy

0

Bạn có thể cần phải xem xét Xác thực mẫu nếu độ trễ do 401 gây ra quá dài. Người dùng sẽ phải đăng nhập một cách rõ ràng, nhưng chỉ một lần. Sau đó, bạn có thể sử dụng một chương trình cookie hoặc cookieless và nhận được một phản ứng trong lần thử đầu tiên.

Tôi cho rằng tải trang sẽ chậm nếu bạn có trình đơn thả xuống tầng và tải trang ban đầu của bạn điền một giá trị khiến POST nhận danh sách tiếp theo, đặt giá trị đó, một POST khác để lại danh sách tiếp theo, và vân vân.Nếu đây là tình huống, có lẽ bạn cần phải điền tất cả các trình đơn thả xuống đó vào chuyến đi khứ hồi đầu tiên thay vì chờ đợi phản hồi POST.

3

cscript.exe c: \ inetpub \ AdminScripts \ Adsutil.vbs SET W3SVC/AuthPersistSingleRequest FALSE

sẽ làm giảm lượng 401 của đáng kể.

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