2012-06-25 15 views
8

Tôi có máy chủ có xác thực cơ sở HTTP và tôi có tập lệnh khách hàng biết tên người dùng và mật khẩu cho máy chủ HTTP ở trên. Tôi sử dụng yêu cầu XHR và đó là setRequestHeader để đặt tiêu đề Cấp quyền, bit này tránh trình duyệt khỏi nhắc hộp thoại đăng nhập HTTP mặc định.Đặt tiêu đề http cho các yêu cầu được tạo bởi trình duyệt?

request.setRequestHeader('Authorization', authInfo); 

này là bình thường cho AJAX yêu cầu, nhưng trong trường hợp tôi muốn tập tin từ máy chủ nêu tải và tôi buộc phải đi mà không AJAX và sử dụng giống như window.location.href từ Javascript nơi trình duyệt tạo theo yêu cầu riêng của mình. Vì yêu cầu này sẽ không bao gồm tiêu đề Authorization (brwoser sẽ thêm tiêu đề Authorization cho mỗi yêu cầu tự động chỉ sau khi nó nhắc hộp thoại đăng nhập và lưu base64 của thông tin đăng nhập cho máy chủ thực) trình duyệt sẽ nhắc nhở hộp thoại đăng nhập HTTP, mà tôi muốn tránh.

Vì vậy, có cách nào để đặt tiêu đề thành yêu cầu không phải là ajax được tạo bởi trình duyệt không?

Trả lời

2

Bạn đã thử đặt tên người dùng và mật khẩu trong URL chưa?

location.href = 'http://user:[email protected]/path/to/download'; 

Tôi nghĩ rằng nên hoạt động trong hầu hết các trình duyệt ngoại trừ, không may là Internet Explorer 7+.

Hoặc, nếu bạn có quyền truy cập vào máy chủ, bạn có thể đặt tập lệnh ở phía máy chủ sử dụng cookie để xác thực. Cookies có thể được thiết lập với JavaScript.

+0

Lưu ý rằng cookie auth có thể bị lạm dụng cho [tấn công CSRF] (http://en.wikipedia.org/wiki/Cross-site_request_forgery) – user123444555621

+0

Cảm ơn, điều này đã hiệu quả. Thật không may, tôi không có thông dịch viên kịch bản nào ở phía máy chủ nên tôi không thể làm theo cách thứ hai. – ggat

+0

Chỉ cần một lưu ý về cách tiếp cận đầu tiên, là có một cách để vượt qua người dùng: mật khẩu ví dụ được mã hóa trong base64 hoặc một cái gì đó. Tôi nghĩ rằng điều này có thể được thực hiện bằng cách gửi cho người dùng mã hóa base64 và mật khẩu trong URL, giải mã chuỗi này ở phía máy chủ và chuyển hướng trên URL mới bằng apache. Vì đây là người dùng tải xuống sẽ không thấy URL được giải mã trong thanh địa chỉ của trình duyệt. Nhưng tôi hỏi có thể có một cách riêng để làm điều này. – ggat