개별 클라이언트를 식별하기 위해 IP 주소 사용에 관한 또 다른 질문 이있었습니다. IP 주소가 왜 부족한지 이해합니다. 그러나 더 많은 정보를 가지고 있고 내가 이해하는 것에서 소켓은 어떻습니까? 쿠키 대신에 잠재적으로 사용될 수 없습니까?
개별 클라이언트를 식별하기 위해 IP 주소 사용에 관한 또 다른 질문 이있었습니다. IP 주소가 왜 부족한지 이해합니다. 그러나 더 많은 정보를 가지고 있고 내가 이해하는 것에서 소켓은 어떻습니까? 쿠키 대신에 잠재적으로 사용될 수 없습니까?
답변:
소켓은 연결을 식별 합니다 . 쿠키는 일반적으로 사용자 를 식별하는 데 사용됩니다 . SE.SE에 대해 두 개의 브라우저 탭을 열면 두 개의 연결과 두 개의 소켓이 있습니다. 그러나 내 설정이 두 설정 모두에서 유지되기를 원합니다. (실제로 브라우저는 페이지 로딩 시간을 단축하기 위해 한 페이지에 여러 개의 소켓을 엽니 다 . 대부분의 브라우저는 페이지 당 4-10 소켓 사이의 기본 최대 값을 가지고 있다고 생각합니다.)
브라우저 탭을 닫으면 시스템의 다른 사용자가 SE.SE에 대한 브라우저 탭을 열 수 있고 동일한 4 배 (source_ip, source_port, target_ip, target_port)를 얻을 수 있습니다. , 그는 내 모든 설정을 갖습니다.
TCP 소켓은 상태 저장이 가능하도록 설계되어있어 일반적으로 세션을 식별하는 데 사용됩니다. SSH 및 ftp와 같은 프로토콜이이를 정확하게 수행합니다.
HTTP는 상태 비 저장을 위해 설계되었으며 각 연결은 다운로드 할 리소스에만 연결됩니다. 리소스가 다운로드되면 HTTP 요청이 진행되는 TCP 소켓이 닫힙니다. 그 이유는 단순성이었습니다. 그러나 부작용은 최신 웹 사이트를 실행하는 HTTP 서버가 SSH 또는 ftp와 같은 소켓 기반 서버보다 훨씬 많은 사용자를 처리 할 수 있다는 것입니다.
따라서 웹 페이지를 다운로드 한 후 HTTP가 소켓을 닫으므로 소켓을 사용할 수 없습니다.
물론 HTTP는 소켓 당 여러 리소스를 다운로드 할 수있는 파이프 라이닝 및 영구 연결과 같은 기능을 가지고 있기 때문에 HTTP가 리소스 당 소켓을 닫는다는 것은 지나치게 단순화하고 있습니다. 그러나 그것은 단지 최적화입니다. 모든 것이 다운로드되면 브라우저는 시간 초과 후 소켓을 닫습니다.
HTTP는 원래 HTML 파일을 다운로드하기위한 간단한 프로토콜로 설계되었습니다. 오래된 브라우저는 Gopher 및 ftp와 같은 다른 프로토콜에서 HTML 파일을 다운로드 할 수도 있습니다. 따라서 HTML 파일은 단순한 텍스트 파일이므로 HTTP를 상태 저장으로 만들 이유가 없습니다.
일단 웹 양식이 도입되고 HTML 페이지가 세션을 필요로하기 시작한 서버 웹 페이지로 데이터를 다시 보낼 수 있습니다. 따라서 쿠키는 상태 비 저장 네트워크 계층을 통해 전송되는 상태 저장 전송 계층을 통해 전송되는 상태 비 저장 프로토콜에 상태를 다시 도입하기 위해 만들어졌습니다. 따라서 전체 애플리케이션 계층은 다음과 같습니다.
요즘에는 웹 페이지에서 서버로 하나의 열린 소켓을 유지할 수있는 웹 소켓이 있습니다. 따라서 웹 소켓 자체는 상태 저장 기능이므로 웹 소켓을 사용하면 소켓을 다시 사용하여 사용자를 식별 할 수 있습니다. 그러나 대부분의 경우 여전히 웹 소켓을 시작하는 자바 스크립트를로드하는 기본 HTML 페이지에 대한 쿠키가 필요합니다.