http 프 록 시 프로 토 콜

2296 단어 http 에이전트
더 읽 기
http 프 록 시 PROXY 에서 흔히 볼 수 있 는 것 은 두 가지 로 나 뉜 다.
하 나 는 CONNECT 터널 모델하 나 는 일반 대리 모델CONNECT 터널 모드
이 모드 는 주로 클 라 이언 트 와 서버 의 상호작용 내용 이 암호 화 되 어 있 습 니 다.프 록 시 서버 는 암호 화 된 내용 을 분석 할 수 없고 최종 대상 서버 등 정 보 를 식별 할 수 없습니다.예 를 들 어 브 라 우 저가 https 의 목 표를 방문 할 때 브 라 우 저 는 자동 으로 프 록 시 서비스 에 보 냅 니 다.
CONNECT   xxxxxx.xxxx:xx HTTP/1.1
대리 머리 1:대리 머리 값 1
대리 머리 1:대리 머리 값 1
대리 머리 1:대리 머리 값 1
빈 줄(또는\r)
이상 의 정 보 는 빈 줄 까지 프 록 시 서버 에 보 여 주 는 명문 입 니 다.이 부분 은 프 록 시 서버 에서 가 져 온 것 이 므 로 대상 서버 에 전송 할 필요 가 없습니다.
프 록 시 서버 는 xxxxx.xxxx:xx 를 분석 하고 대상 xxxxx.xxxx:xx 에 연결 해 야 합 니 다.연결 에 성공 하려 면 HTTP/1.1 200 Connection Established(여 기 는 두 줄 입 니 다)를 되 돌려 야 합 니 다.
try {
								response = new Socket(getTargetHost(),
										getTargetPort());
								getRequest().getOutputStream().write(
										"HTTP/1.1 200 Connection Established

" .getBytes()); } catch (Exception e) { getRequest().getOutputStream().write( "HTTP/1.1 502 Bad Gateway

".getBytes()); return true; }

이 부분의 상호작용 이 완성 되면 양 방향 스 트림 복사 입 니 다.이것 은 할 말 이 없습니다.바로 a 의 input 에서 얻 은 데 이 터 를 b 의 output 를 통 해 출력 하 는 것 입 니 다.
일반 에이전트 모드
http 프로 토 콜 과 기본적으로 일치 하 는 대화 형 프로 토 콜 의 유일한 차이 점 은 GET(POST 와 같은)프로 토 콜 데 이 터 를 보 낼 때 입 니 다.
GET /test.html HTTP/1.1
되다
GET http://sxxxxx.com/xxxx.html HTTP/1.1
프 록 시 서버 는 이 줄 의 머리 를 통 해 목표 의 ip 과 포트 를 분석 하고 모든 내용 을 전송 해 야 합 니 다.전송 하기 전에 머리 정 보 를 수정 해 야 합 니 다.(수정 하지 않 아 도 됩 니 다.대부분 새로운 HTTP 서버 소프트웨어 이기 때문에 여전히 분석 할 수 있 습 니 다)
Pattern pattern = Pattern.compile("http:\\/\\/([^/:]+)([:]{0,1}\\d*)?");
		Matcher matcher = pattern.matcher(lines[1]);
		//      
		if(matcher.find()) {
			//  host,port
			String domain = matcher.group(1);
			String port = matcher.group(2);
			//   host
			if(port.equals("")) {
				this.targetPort = 80;
			} else {
				this.targetPort = Integer.valueOf(port.replace(":", ""));
			}
			
			this.targetHost = domain;
			line = line.replace(matcher.group(0), "");
			isHttpProxy = true;
		}

좋은 웹페이지 즐겨찾기