> 웹 프론트엔드 > JS 튜토리얼 > JavaScript의 WebSocket 클라이언트 연결에 인증과 같은 사용자 정의 HTTP 헤더를 어떻게 추가할 수 있습니까?

JavaScript의 WebSocket 클라이언트 연결에 인증과 같은 사용자 정의 HTTP 헤더를 어떻게 추가할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-11-30 08:13:14
원래의
644명이 탐색했습니다.

How Can I Add Custom HTTP Headers, Such as Authorization, to a WebSocket Client Connection in JavaScript?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿