Có thể có WebSockets với HTTPS không?
Khi chuyển sang HTTPS, WebSocket của tôi trả về lỗi bảo mật và hoạt động hoàn hảo với HTTP thông thường.
Dưới đây, một đoạn mã;
socket = new WebSocket("ws://my_www:1235");
Có thể có WebSockets với HTTPS không?
Khi chuyển sang HTTPS, WebSocket của tôi trả về lỗi bảo mật và hoạt động hoàn hảo với HTTP thông thường.
Dưới đây, một đoạn mã;
socket = new WebSocket("ws://my_www:1235");
Câu trả lời:
Kết nối WebSocket bắt đầu vòng đời của nó bằng cách bắt tay HTTP hoặc HTTPS. Khi trang được truy cập thông qua HTTP, bạn có thể sử dụng WS hoặc WSS (WebSocket secure: WS over TLS). Tuy nhiên, khi trang của bạn được tải qua HTTPS, bạn chỉ có thể sử dụng WSS - các trình duyệt không cho phép "hạ cấp" bảo mật.
Bạn không thể sử dụng WebSockets qua HTTPS, nhưng bạn có thể sử dụng WebSockets qua TLS (HTTPS là HTTP qua TLS). Chỉ cần sử dụng "wss: //" trong URI.
Tôi tin rằng phiên bản Firefox gần đây sẽ không cho phép bạn sử dụng các WebSockets không phải TLS từ một trang HTTPS, nhưng điều ngược lại sẽ không thành vấn đề.
wss://
tới ws://
. Vì vậy, tôi sử dụng wss://ws.domain.com
và apache áp dụng proxy trên đó và chuyển hướng yêu cầu nơi máy chủ WS đang chạy. ví dụ: ws://10.12.23.45:5641/server.php
. và tôi biết nó là một giải pháp rất tệ - mặc dù, nó phù hợp với tôi. Tôi đánh giá cao sự giúp đỡ của bạn nếu bạn hướng dẫn tôi cấu hình apache. ví dụ: nơi để đặt .cert
vv cảm ơn!
1 cảnh báo bổ sung (ngoài câu trả lời của kanaka / peter): nếu bạn sử dụng WSS và chứng chỉ máy chủ không được trình duyệt chấp nhận, bạn có thể không nhận được bất kỳ hộp thoại hiển thị nào của trình duyệt (giống như nó xảy ra với các trang Web). Điều này là do WebSockets được coi là cái gọi là "nguồn phụ" và các hộp thoại chấp nhận chứng chỉ / bảo mật / bất kỳ hộp thoại nào không được hiển thị cho các nguồn phụ.
alert()
thế nào?