2012-06-04 9 views
1

나는 HTTP 프록시 서버를 구현하여 프로토콜의 더 미세한 부분에 대해 더 깊이 이해하고 그 동안 소켓 프로그래밍을 배우고 싶지만 본격적인 구현은 원하지 않는다. HTTP 서버. 프록시를 구현하려는 경우 관련 페이지의 관련 RFC 페이지 및 섹션은 무엇입니까?HTTP 프록시 구현하기

일반 HTTP 프록시로 시작한 다음이를 HTTPS 프록시로 확장 할 계획입니다.

답변

3

나는 HTTP 1.0 (RFC 1945)HTTP 1.1 (RFC 2616)을 살펴볼 것입니다. 당신은 또한에 좀 걸릴 수 있습니다 :

당신이 구글 찾을 수있는 예제 코드의 많은 아마있다!

+1

RFC3986은 한 동안 다시 2396을 폐기. 822가 2822로 바뀌었지만 HTTP가 MIME이 아니기 때문에 나는 그것을 보지 않는 것이 좋습니다 (또는 1521). MIME과 같은 것입니다. –

2

유용한 IETF에서 HTTPbis 그룹의 작업을 찾을 수도 있습니다. 우리는 더 명확하고 쉽게 구현할 수 있도록 사양을 다시 작성하고 있습니다.

자세한 내용은 http://trac.tools.ietf.org/wg/httpbis/trac/wiki을 참조하십시오.

3

저는 현재 또한 작업 중입니다. 기본 구현은 간단합니다. 소켓 포트를 듣고, 호스트를 찾고, 원격 서버에 연결하고, http 헤더를 보내고, 서버에서 recv를 보낸 다음 클라이언트로 다시 보냅니다. 어려운 부분은 일관된 연결과 파이프 라이닝입니다.

HTTPS로로, 헤더는 다음과 같이이다 :

CONNECT addons.mozilla.org:443 HTTP/1.1 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 
Host: addons.mozilla.org 

프록시 다음, 클라이언트에 200 메시지 회신 한 후, 서버에 연결 앞뒤로 리디렉터로 리디렉션합니다.

확인이 : http://tools.ietf.org/html/draft-luotonen-ssl-tunneling-03

+0

이 정보를 사용하여 SSLJ 터널링을 NodeJS에서 여러 가지 결과를 얻으려고했습니다. 나는 충분히 낮은 연결을 잡으려고하지 않는다고 생각하고 NodeJS 기본 처리 규칙은이 프로토콜을 지원하지 않는다. 참조 : https://github.com/pinf/pinf-proxy-js/issues/1 – cadorn

+0

@strongwillow http 쿠키와 같은 것들은 어떻게 처리됩니까? 특히 프록시는 원격 서버의 관점에서 볼 때 클라이언트이기 때문에 호출 클라이언트뿐 아니라 프록시에서도 쿠키가 삭제됩니까? – Howiecamp

+0

@Howiecamp 정상적인 HTTP 헤더 일 뿐이므로 쿠키에는 특별한 대우가 없습니다. – strongwillow