소켓 메세지 읽을때...
본문
안녕하세요.
웹소켓 통신중인 사이트의
Request URL 을 가져와서 아래쪽에 넣으면..
(임의로 aaa.html 을 페이지 하나 만들어서 주소만 넣습니다.)
서로 다른 2개의 사이트가 있다면..
어떤 것은..값이 찍히는데..
어떤 것은 아무것도 찍히지가 않더라구요..
가장큰 차이는 개발자탭에서 해당 주소에서 Copy request headers 를 보면..
Cookie: cdn=http://testsite.com; lang=ko; locale=ko; SITESESSIONID=rs2rjisup5qb5i7mrwruykxa32d
이런값이 있고 없고의 차이인듯 합니다. 그 외에는 차이를 잘 모르겠는데..ㅠ
값이 안찍히는 것은 왜 안되는 건지 혹시 경험있으신 분이나..원인을 아시는분 있으실까요...ㅠㅠ
const Ssscode = document.getElementById("sscode").value;
const webSocket = new WebSocket(Ssscode );
// const webSocket = new WebSocket("ws://test.testsite.com/xxxxxxx");
// 이런식으로 통신중인 소켓 주소를 가져와 넣습니다.
webSocket.onopen = function () {
console.log('소켓 연결 성공!'); /// ==> 여기까지는 다 찍힘.
};
webSocket.onmessage = function (event) {
console.log(event.data); /// ==> 여기에서 message 가 찍히는곳이 있고 안찍히는곳이 있음.
};
혹시 질문분류 를 잘못 선택했다면...지적해 주세요..^^;;
!-->답변 2
gpt에게 물어봤어요~도움이 되실지는 모르겠어요~
웹소켓 통신에서 특정 사이트에서는 데이터가 정상적으로 수신되고, 다른 사이트에서는 데이터가 수신되지 않는 경우, 몇 가지 가능한 원인을 고려해볼 수 있습니다. 여기서 주목할 점은 Cookie가 요청 헤더에 포함되어 있는지의 여부입니다. Cookie의 유무가 통신에 영향을 미친다면, 다음과 같은 이유를 고려해볼 수 있습니다:
1. 인증 및 세션 관리
Cookie 포함: 일부 웹소켓 서버는 클라이언트의 인증 상태를 관리하기 위해 쿠키를 사용할 수 있습니다. 예를 들어, 사용자가 로그인한 상태를 유지하기 위해 세션 ID를 쿠키에 저장하고, 웹소켓 연결 시 이 쿠키를 사용해 사용자 인증을 수행할 수 있습니다. 따라서, 쿠키가 포함되어 있지 않은 경우, 서버가 클라이언트를 인증하지 못하고 통신을 제한할 수 있습니다.
2. Same-Origin Policy 및 CORS
웹소켓 연결은 보통 Same-Origin Policy(SOP)의 제약을 받지 않습니다. 그러나, 웹소켓 서버가 특정 출처에서의 연결만을 허용하도록 구성되어 있을 수 있습니다. 이 경우, 서버는 Origin 헤더를 확인하여 연결을 수락하거나 거부할 수 있습니다. Cookie가 포함되지 않은 요청은 SOP 또는 CORS(Cross-Origin Resource Sharing) 정책 위반으로 간주되어 연결이 거부될 수 있습니다.
3. 웹소켓 서버 구성 및 보안 정책
웹소켓 서버의 구성이나 보안 정책에 따라, 특정 요청 헤더가 없는 연결을 거부할 수 있습니다. 예를 들어, 서버가 요청에 Cookie나 특정 사용자 인증 토큰의 존재를 요구하도록 구성되어 있다면, 이러한 정보가 없는 요청은 처리되지 않을 수 있습니다.
4. 네트워크 문제나 서버 상태
네트워크 상의 문제나 서버의 현재 상태로 인해 통신이 원활하게 이루어지지 않을 수도 있습니다. 이는 Cookie와는 직접적인 관련이 없지만, 다른 요인으로 인해 통신이 차단되거나 지연될 수 있음을 의미합니다.
해결 방법
서버 로그 확인: 웹소켓 서버의 로그를 확인하여 연결 실패의 구체적인 원인을 파악합니다.
개발자 도구 사용: 브라우저의 개발자 도구를 사용하여 웹소켓 연결 시도 시 서버로부터 받는 응답을 확인합니다. 특히, 연결 실패 시 서버로부터 반환되는 오류 코드나 메시지를 확인할 수 있습니다.
서버 구성 검토: 웹소켓 서버의 구성을 검토하여 Cookie나 Origin 헤더에 대한 요구 사항이 있는지 확인합니다. 필요한 경우, 서버의 CORS 정책이나 인증 방식을 조정할 수 있습니다.
클라이언트 코드 검증: 클라이언트 측에서 웹소켓 연결을 시도할 때 필요한 요청 헤더가 모두 포함되어 있는지, 올바른 형식으로 전송되고 있는지 확인합니다.
이러한 점들을 고려하여 문제를 해결해 나가는 것이 중요합니다.
message 이벤트는 웹소켓서버에서 수신된 메세지가 있는 경우 동작합니다.
사이트마다 동일한 응답을 한다는 보장은 없으므로
결과가 다른것이 정상 일수 있습니다.