WebSocket 클라이언트 API의 HTTP 헤더
이 기능을 지원하는 모든 HTTP 헤더 클라이언트를 사용하여 HTTP 헤더를 사용자 정의하세요. WebSocket 클라이언트이지만 네트워크 플랫폼의 WebSocket API를 사용하여 이 작업을 수행하는 방법을 찾을 수 없습니다.
혹시 구현하는 방법 아시는 분 계신가요?
var ws = new WebSocket("ws://example.com/service");
구체적으로는 HTTP Authorization 헤더를 보낼 수 있어야 합니다.
업데이트됨
JavaScript WebSockets API에는 클라이언트/브라우저가 보낼 추가 헤더를 지정하는 메서드가 없습니다. HTTP 경로("GET /xyz") 및 프로토콜 헤더("Sec-WebSocket-Protocol")는 WebSocket 생성자에서 지정할 수 있습니다.
Sec-WebSocket-Protocol 헤더(때때로 WebSocket 관련 인증에 사용하기 위해 확장됨)는 WebSocket에서 파생됩니다. 생성자에 대한 선택적 두 번째 인수는 다음을 생성합니다.
var ws = new WebSocket("ws://example.com/path", "protocol"); var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);
위 코드는 다음 헤더를 생성합니다.
Sec-WebSocket-Protocol: protocol
및
Sec-WebSocket-Protocol: protocol1, protocol2
구현 WebSocket A 공통 인증/권한 부여 패턴은 WebSocket 클라이언트를 호스팅하는 페이지가 서버로부터 티켓을 요청하는 티켓 시스템을 구현하는 것입니다. 이 티켓은 연결 설정 중에 URL/쿼리 문자열이나 프로토콜 필드에서 전달되거나 연결이 설정된 후 첫 번째 메시지로 지정되어 전달됩니다. 그런 다음 서버는 티켓이 유효한 경우(존재하는지, 사용되지 않았는지, 티켓에 인코딩된 클라이언트 IP가 일치하는지, 티켓의 타임스탬프가 최신인지 등)에만 연결을 계속하도록 허용합니다. 다음은 WebSocket 보안 정보 요약입니다: https://devcenter.heroku.com/articles/websocket-security.
이전에는 기본 인증이 옵션이었지만 더 이상 사용되지 않으며 최신 브라우저에서는 이 헤더를 지정하더라도 이 헤더를 보내지 않습니다.
기본 인증 정보(더 이상 사용되지 않음):
인증 헤더는 생성된 WebSocket URI의 사용자 이름 및 비밀번호(또는 사용자 이름만) 필드입니다.
var ws = new WebSocket("ws://username:password@")
위 코드는 base64로 생성되었습니다. 문자열 "username:password"에 대해 다음 헤더를 인코딩합니다.
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
기본 인증은 Chrome 55 및 Firefox 50에서 테스트되었으며 기본 인증 정보가 실제로 서버와 협상되는 것으로 확인되었습니다(작동하지 않을 수 있음). 사파리에서).
기본 인증 답변을 주신 Dmitry Frank에게 감사드립니다.
위 내용은 JavaScript의 WebSocket 클라이언트 연결에 인증과 같은 사용자 정의 HTTP 헤더를 어떻게 추가할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!