내 설정을 설명하겠습니다. example.com과 같은 기본 도메인 이름에 대한 모든 CNAME 레코드 인 여러 도메인 이름이 있습니다.
example.com-> serverIP
company1.example.com-> example.com
company2.example.com-> example.com
저는 기본적으로 소프트웨어가 단순히 리퍼러를 감지하고로드 할 로고 및 스타일 시트 자산을 알고있는 흰색 레이블이 지정된 소프트웨어 버전을 개발하고 있습니다.
그래서 그것은 모두 훌륭하고 좋지만 socket.io가 http://company1.example.com/socket.io/1/?key=123456 과 같은 URL로 핸드 셰이크를 시도 하면 요청이 보류 중입니다. 앱에 로그인 할 때 상태. 기본 도메인 인 example.com에서는 모든 것이 잘 진행됩니다. 주 도메인은 쿠키를 socket.io 핸드 셰이크 URL로 보내는 반면 회사 하위 도메인은 그렇지 않습니다.
누구든지 이것을 고치는 방법에 대한 아이디어가 있습니까? 서버에 도달하지 않는 것 같으며 몇 분 후에 보류중인 요청이 완료 될 수 없다는 메시지를 반환합니다.
두 가지 선택이 있습니다.
인증을 위해 쿠키를 사용하지 마십시오. 토큰 기반 방법을 사용하십시오. 클라이언트가 앱에 연결되는 즉시 인증 토큰을 보내십시오. localstorage에 토큰을 저장할 수 있으며 처음으로 서버에서 토큰을 javascript 또는 html에 포함 할 수 있습니다.
왜 토큰을 사용하지 말아야하는지 궁금하다면 socket.io 와 유사한 것을 구현하는 sockjs-node 문서에서 이것을 읽으십시오.
쿠키는 브라우저와 http 서버 간의 계약이며 도메인 이름으로 식별됩니다. 브라우저에 특정 도메인에 대한 쿠키 세트가있는 경우 모든 http 요청의 일부로 호스트에 전달합니다. 그러나 다양한 전송이 작동하도록 SockJS는 중개자를 사용합니다.
대상 SockJS 도메인에서 호스팅되는 iframe. 즉, 서버는 실제 도메인이 아닌 iframe에서 요청을받습니다. iframe의 도메인은 SockJS 도메인과 동일합니다. 문제는 모든 웹 사이트가 iframe을 포함하고 그것과 통신 할 수 있고 SockJS 연결 설정을 요청할 수 있다는 것입니다. 이 시나리오에서 승인을 위해 쿠키를 사용하면 모든 웹 사이트에서 귀하의 웹 사이트와의 SockJS 통신에 대한 전체 액세스 권한이 부여됩니다. 이것은 전형적인 CSRF 공격입니다. 기본적으로 쿠키는 SockJS 모델에 적합하지 않습니다. 세션을 승인하려면 페이지에 고유 한 토큰을 제공하고 SockJS 연결을 통해 가장 먼저 전송하고 서버 측에서 유효성을 검사합니다. 본질적으로 이것이 쿠키가 작동하는 방식입니다.
그래도 확신 할 수 없다면 선택 2 번을 확인하십시오.
쿠키를 계속 사용하십시오. 그래도 작동하지 않을 수 있습니다. 최신 socket.io (0.9.x 또는 1.x)로 업그레이드하십시오. 0.9.x를 사용하여 원본 구성 속성을 설정합니다 . 또는 1.x에서 origins
서버 옵션을 설정하십시오 . *:*
또는로 설정할 수 있습니다 *example.com:*
.
또한이 질문을 확인하십시오 : CORS with socket.io
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다