독서 스터디 6주차! 이번장은 뭔가.. 이전장들에 비해서 별로 재미 없었어요!
5장까지 책 내용을 적으면서 생각했던건데, 너무 길게 나열하는 느낌이 강해서... 더 간략하게 정리를 해 볼까 하는데.. 계속 고민 해야겠습니다.
아무튼.. 6주차도 어김없이 읽은 내용을 정리하고 문제를 만들어 가야합니다!
클리어인터의 입장에서 트랜잭션을 수행하는 중개인
이다.
클라이언트는 HTTP 서버와 직접 이야기한다.
클라이언트는 HTTP 서버와 직접 이야기하는 대신, 자신의 입장에서 서버와 대화해주는 프락시와 이야기한다.
프락시는 같은 프로토콜을 사용하는 둘 이상의 애플리케이션을 연결
게이트웨이는 서로 다른 프로토콜을 사용하는 둘 이상을 연결
둘의 차이는 모호하다! 브라우저와 서버는 다른 버전의 HTTP를 구현하기 때문에, 프락시는 때때로 약간의 프로토콜 변환을 하기도 한다.
실용적으고 유용한 것이라면 무슨 일이든 하는 프락시! 보안을 개선하고
, 성능을 높여주며
, 비용을 절약
한다.
필터링
접근을 제어
보안기능
캐시
대리 또는 리버스(서버 가속기)
콘텐츠 라우터
트랜스코딩
익명화
프락시 계층에서, 메시지는 최종적으로 원 서버에 도착할 때까지 프락시와 프락시를 거쳐 이동한다.
프락시 서버들은 부모와 자식의 관계를 갖고, 아래와 같은 흐름으로 언제나 메시지가 흐른다.
클라이언트 <=> 프락시1 <=> 프락시2 <=> 프락시3 <=> 원 서버
계층이 반드시 정적이지는 않다. 동적으로 부모를 선택할 수 있는데 다음과 같은 경우가 그 예이다.
부하 균형
지리적 인접성에 근거한 라우팅
프로토콜/타입 라우팅
유료 서비스 가입자를 위한 라우팅
많은 웹 브라우저들은 수동 혹은 자동 프락시 설정을 지원한다.
HTTP 트래픽을 지켜보고 가로채어 클라이언트 모르게 트래픽을 프락시로 보내는 스위칭 장치와 라우팅 장치를 필요로 한다. 인터셉트 프락시
웹 서버 앞에 위치하는 대리 프락시는 웹 서버의 이름과 IP 주소를 자신이 직접 사용한다.
HTTP 리다이렉션 명령을 클라이언트에게 돌려줌으로써 클라이언트의 요청을 프락시로 리다이렉트 하도록 설정할 수 있다.
클라이언트는 단일한 서버와 직접 대화!
단일 서버는 자신의 호스트 명과 포트번호를 알고 있으므로, 클라이언트는 불필요한 정보 발송을 피하기 위해 스킴과 호스트가 없는 부분 URI만 보냈다.
프락시는 목적지 서버와 커넥션을 맺어야 하기 때문에, 그 서버의 이름을 알 필요가 있다. 프락시 기반 게이트웨이는 FTP 리소스나 그 외의 스킴과 연결하기 위해 URI의 스킴을 알 필요가 있었다. 그렇기에 부분 URI가 문제가 된 것
!
우리는 서버로는 부분 URI를, 프락시로는 완전한 URI를 보낼 필요가 있다.
부분 URI
를 보낸다.완전한 URI
를 보낸다.요청이 부분 URI인 /index.html
로 오면, 가상으로 호스팅 되는 웹 서버는 그 요청이 접근하고자 하는 웹 사이트의 호스트 명을 알 필요가 있다.
가상으로 호스팅 되는 웹 서버는 호스트와 포트에 대한 정보가 담겨 있는 Host 헤더를 요구한다.
클라이언트는 자신이 프락시와 대화하고 있음을 항상 알고 있지 않다! 몇몇 프락시는 클라이언트에게는 보이지 않을 수 있기 때문이다!
이 부분은 정말 조심해야 한다! 아주 사소하고 무해해 보이는 URI 변경
이라도 다운스트림 서버와 상호운용성 문제를 야기
할 수 있다. 프락시 서버는 가능한 관대해야 하며, 특히 인터셉트 프락시가 URI를 전달할 때 절대 경로를 고쳐 쓰는 것을 금지한다. 오직 빈 경로를 '/'로 교체하는 것만이 유일한 예외이다.
브라우저는 요청 URI를 상황에 따라 다르게 분석한다.
호스트 명의 짧은 약어를 타이핑한 것으로 보고 자동화된 호스트 명의 확장
을 제공한다.
www.
접두사를 붙이고, .com
접미사를 붙인다. ex) naver
만 타이핑 해도 자동 확장한다!이제 클라이언트에서 서버로 흘러가는 요청이 둘 이상의 프락시를 지나는 일은 흔한 일이 되었다. 이에 따라 프락시를 넘나드는 메시지의 흐름을 추적하고 문제점을 찾아내는 것도 필요한 일이 되었다.
메시지가 프락시나 게이트웨이를 지날때마다 해당 정보가 Via목록의 끝에 반드시 추가되어야 한다.
메시지의 전달을 추적하고, 메시지 루프를 진단하고, 요청을 보내고 그에 대한 응답을 돌려주는 과정에 관여하는 모든 메시지 발송자들의 프로토콜을 다루는 능력을 알아보기 위해 사용된다.
HTTP/1.1의 TRACE 메서드는 요청 메시지를 프락시의 연쇄를 따라가면서 어떤 프락시를 지나가고 어떻게 각 프락시가 요청 메시지를 수정하는지 관찰/추적할 수 있도록 해준다.
클라이언트, 서버, 프락시는 HTTP 명세의 여러 버전에 대해 여러 벤더에 의해 만들어진다. 그 종류와 특성, 버그가 가지각색이라는 뜻이다...!
프락시 서버가 넘어오는 헤더 필드들을 모두 이해할 수는 없다. 그렇다면?
서버의 특정 리소스가 어떤 기능을 지원하는지(메서드) 클라이언트가 알아볼 수 있게 해준다.
OPTIONS * HTTP/1.1
: 서버 전체의 능력에 대해 묻는다.
지원되는 메서드들이나 서버가 지원하는 모든 메서드(요청 URI가 *인 경우)를 열거한다.
프락시는 Allow 헤더 필드를 수정할 수 없다. 클라이언트는 원 서버와 대화하는 다른 경로를 갖고 있을 수도 있기 때문에!
처음 읽을 때는 재미 없었는데! 정리하며 다시 읽어보니 또 단어가 익숙해 졌다고 재밌게 정리했습니다.
너무 장황한 설명이나, 중요치 않다고 생각되는(지극히 개인적인) 키워드 몇개는 쪼끔 빠졌는데.. 잘 판단이 안서니 역시 정리를 한다는게 쉽지 않네요.
프락시 관련된 포스팅을 보면 항상 이게 무슨 소리야? 했는데 프락시라는 친구와 조금이라도 알게 된 거 같으니 앞으로는 좀 더 알아들을 수 있겠죠!