클라이언트는 WebSocket API에 연결하는 동안 WebSocket 서브프로토콜Sec-WebSocket-Protocol
필드를 사용할 수 있습니다. 클라이언트가 API가 지원하는 서브프로토콜을 요청하는 경우에만 연결을 허용하도록 $connect
라우팅에 대한 통합을 설정할 수 있습니다.
다음 예제 Lambda 함수는 Sec-WebSocket-Protocol
헤더를 클라이언트에 반환합니다. 이 함수는 클라이언트가 myprotocol
서브프로토콜을 지정하는 경우에만 API에 대한 연결을 설정합니다.
이 예제 API 및 Lambda 프록시 통합을 생성하는 AWS CloudFormation 템플릿에 대해서는 ws-subprotocol.yaml
단원을 참조하세요.
export const handler = async (event) => {
if (event.headers != undefined) {
const headers = toLowerCaseProperties(event.headers);
if (headers['sec-websocket-protocol'] != undefined) {
const subprotocolHeader = headers['sec-websocket-protocol'];
const subprotocols = subprotocolHeader.split(',');
if (subprotocols.indexOf('myprotocol') >= 0) {
const response = {
statusCode: 200,
headers: {
"Sec-WebSocket-Protocol" : "myprotocol"
}
};
return response;
}
}
}
const response = {
statusCode: 400
};
return response;
};
function toLowerCaseProperties(obj) {
var wrapper = {};
for (var key in obj) {
wrapper[key.toLowerCase()] = obj[key];
}
return wrapper;
}
wscat
-s
플래그를 사용하여 연결 중에 서브프로토콜을 지정합니다.
다음 명령은 지원되지 않는 서브프로토콜을 사용하여 연결을 시도합니다. 클라이언트가 chat1
서브프로토콜을 지정했기 때문에 Lambda 통합에서 400 오류를 반환하고 연결이 실패합니다.
wscat -c wss://
api-id
.execute-api.region
.amazonaws.com/beta
-s chat1error: Unexpected server response: 400
다음 명령은 연결 요청에 지원되는 서브프로토콜을 포함합니다. Lambda 통합은 연결을 허용합니다.
wscat -c wss://
api-id
.execute-api.region
.amazonaws.com/beta
-s chat1,myprotocolconnected (press CTRL+C to quit)
WebSocket API 호출에 대한 자세한 내용은 WebSocket API 간접 호출 단원을 참조하세요.