브라우저와 웹 서버 간의 TCP 연결을 이해하려고합니다. 내 로컬 컴퓨터에서 실행중인 웹 서버가 있고 localhost : 3000 또는 127.0.0.1:3000을 사용하여 예상대로 잘 탐색 할 수 있습니다. ("rails s"과 WEBrick을 실행 중입니다.)웹 서버에 연결할 때 socat에 "fork"가 필요한 이유는 무엇입니까?
저는 브라우저와 웹 서버 사이에 소프트웨어 중개자를 배치하려고 했으므로 socat을 실험하기 시작했습니다. 다음은 잘 작동합니다 :
socat TCP-LISTEN:8080,fork TCP:localhost:3000
나는 localhost : 8080을 탐색 할 수 있으며 예상대로 작동합니다. 그러나, "fork"인수를 생략하면,
socat TCP-LISTEN:8080 TCP:localhost:3000
로컬 레일 웹 사이트는 브라우저에서 꽤 깨져 보입니다.
왜 fork 인수가 필요합니까? 왜 브라우저가 없으면 < -> 웹 서버 연결이 필요하지 않습니까?
대단히 감사합니다. Celada. 그건 좋은 말이야. – user691307
내가 실제로하려는 것은 브라우저와 웹 서버 사이에 내 "중간"프로그램을 작성하는 것입니다. 웹 서버에 클라이언트 TCP 연결을 열고 다른 포트에 "수신 대기"TCP 서버를 엽니 다. 브라우저는 수신 대기 포트에 대한 클라이언트 연결을 엽니 다. 그래서 한 쪽 브라우저에는 여러 TCP 세션이 열리고 닫히는 순서가 있습니다. 그러나 웹 서버 측에는 하나의 설정된 TCP 연결 만 있습니다. 그건 실패합니다. 클라이언트가 시작하고 TCP 연결을 중지 할 때마다 내 자제 중개자가 웹 서버 연결을 닫고 다시 열 수 있다고 생각합니다. 괜찮아? – user691307
소리도 좋아요. 또한 가장 간단한 일입니다. 코드는 HTTP 사용자 에이전트가 할 때마다 서버에 대한 새 연결을 열고 동시에 닫습니다. HTTP 요청의 내용을 해석하는 것보다 작업량이 적어 서버를 향한 하나의 연결로 클라이언트를 구성하는 여러 연결을 집계하기 위해 내용을 조정할 수있는 경우와 그렇지 않은 경우를 파악할 수 있습니다. 그렇게하면 본격적인 HTTP 프록시 서버를 구현할 수 있습니다! – Celada