Tôi muốn thực hiện cuộc gọi AJAX đến máy chủ bảo mật sử dụng chứng chỉ tự ký. Trong môi trường mà ứng dụng của tôi đang được sử dụng, điều này là tốt - tôi có thể cung cấp chứng chỉ CA cho người dùng và yêu cầu họ cài đặt ứng dụng đó trước khi sử dụng ứng dụng. Tuy nhiên, đôi khi, người dùng cố truy cập ứng dụng trước khi cài đặt chứng chỉ. Trong những trường hợp này, ứng dụng âm thầm không thành công - ít nhất là trong Firefox (trường hợp phổ biến nhất của sự cố), có vẻ như cuộc gọi âm thầm chết, thậm chí không cần tắt trình xử lý lỗi. FWIW, nếu người dùng truy cập vào trang thực tế trên máy chủ, họ sẽ nhận được cảnh báo cert.Cuộc gọi AJAX tới HTTPS không tin cậy (tự ký) không thành công
Tôi có thể hack trong một cách giải quyết - hãy thực hiện yêu cầu nhịp tim/ping và thiết lập bộ đếm thời gian để xem máy chủ có phản hồi kịp thời không - nhưng điều đó có vẻ, tốt, hacky. Tôi muốn có thể kiểm tra kết nối trước thời hạn. Cách "đúng" để đảm bảo máy chủ bạn muốn nói chuyện có chứng chỉ đáng tin cậy từ bên trong Javascript là gì? Nếu nó làm cho bất kỳ sự khác biệt, tôi đang làm yêu cầu AJAX của tôi thông qua JQuery.
CẬP NHẬT: Có một cú đấm tuyệt vời ở đây. Hóa ra, AJAX không phải là vấn đề. Tôi đã chắc chắn dựa trên các triệu chứng mà nó liên quan đến các chứng chỉ tự ký, nhưng việc thiếu lỗi AJAX là đáng lo ngại, đặc biệt. đưa ra thông số được liên kết trong câu trả lời dưới đây. Một thành viên khác của nhóm đã đóng đinh: trình xử lý lỗi AJAX không được kích hoạt vì JQuery chưa bao giờ được tải! Chúng tôi đã bao gồm JQuery từ một tên miền phụ khác của trang web của chúng tôi, cũng được lưu trữ trên HTTPS - và người dùng đã thêm ngoại lệ choService.example.com của chúng tôi chứ không phải js.example.com. Dường như nếu bạn trỏ một thẻ <script>
vào kết nối an toàn không đáng tin cậy, thì cũng không tự động xóa.
{/ headdesk}
Hành vi bạn nhìn thấy khác với việc không thể liên lạc với máy chủ chút nào, chẳng hạn như khi kết nối mạng của bạn biến mất? – martona