이 글은 HTTP 완벽가이드 20장을 참고해 정리한 포스팅입니다.
HTTP 애플리케이션은 언제나 아래 세가지를 원하기 때문에 리다이렉션은 현대의 웹에서는 불가피합니다.
위와 같은 이유들 때문에, 웹 콘텐츠는 흔히 여러장소에 배포하게 됩니다.
신뢰성
이 개선됩니다.응답시간
도 줄여줍니다.네트워크 혼잡도
도 줄어들게 됩니다.이렇게 리다이렉션이란 최적의 분산된 콘텐츠를 찾는 것을 도와주는 기법의 집합이라고 할 수 있습니다.
리다이렉션 구현에는 load-balancing(부하 균형)의 과제가 포함되는데, 왜냐하면 둘은 서로 공존하기 떄문입니다.(대부분의 리다이렉션 장치들은 몇가지 방식의 부하 균형을 포함)
그 외
영속적인 리다이렉션
이 리다이렉션은 영원히 지속됨을 의미합니다. 원래의 URL이 더 이상 사용되지 않아야 하며 새로운 URL을 더 선호해야 함을 시사합니다. 검색 엔진 로봇은 그들의 인덱스 내에서 리소스에 대한 연관 URL의 갱신을 촉발시킵니다.
301 Moved Permanently
308 Permanent Redirect
일시적인 리다이렉션
때때로 요청된 리소스는 그것의 표준 위치에서 접근할 수 없고 다른 위치에서 접근 가능한 경우가 있습니다. 이런 경우 일시적인 리다이렉트가 사용될 수 있습니다. 검색 엔진 로봇은 새로운, 일시적인 링크를 기억하지 못합니다. 일시적인 리다이렉션은 일시적인 진행율 페이지를 표시하고자 리소스를 만들고 갱신하며 삭제할 때 사용될 수 도 있습니다.
302 Found
303 See Other
307 Temporary Redirect
특수 리다이렉션
참고: https://developer.mozilla.org/ko/docs/Web/HTTP/Redirections
리다이렉션의 목표는 HTTP 메시지를 가용한 웹서버로 가급적 빨리 보내는 것입니다. HTTP 메시지가 인터넷을 통해 그 요청이 나아가는 방향은 HTTP 애플리케이션과 라우팅 장치에 영향을 받게 됩니다. 그 예들은 아래와 같습니다.
위에서 설명한 브라우저 설정
, DNS
, TCP/IP 라우팅
, 그리고 HTTP
는 모두 메시지를 리다이렉트 하는 메커니즘을 제공합니다.
브라우저 설정
과 같은 방법은 프락시로 향하는 리다이렉트 트래픽에서만 사용할 수 있다는 점을 유의해야 합니다.메커니즘 | 어떻게 동작하는가 | 재 라우팅의 근거 | 제약사항 |
---|---|---|---|
HTTP 리다이렉션 | 웹 서버는 콘텐츠를 제공하기에 최적인 웹 서버로의 redirect를 클라이언트에게 보내줍니다. | 라운드 로빈 부하 균형, 회전 지연 최소화, 최단 거리 선정, ..etc | 느릴수 있고, 모든 트랜잭션이 추가 리다이렉트 단계를 포함하게 됩니다.또한 첫번째 웹서버가 요청 부하를 다룰 수 있어야 합니다. |
DNS 리다이렉션 | DNS 서버가 URL의 호스트명에 대한 응답으로 어떤 IP 주소를 사용할지 결정합니다. | 라운드 로빈 부하 균형, 회전 지연 최소화, 최단 거리 선정, ..etc | DNS 서버를 설정할 필요가 있습니다. |
임의 캐스트 어드레싱 | 여러서버가 같은 IP주소를 사용. 그 외의 라우터들은 공유된 IP주소로 향하는 패킷을 가장 가까운 서버로 보냄 | 라우터들은 내장된 최단거리 라우티 기능을 사용 | 라우터를 설정할 필요 있음, 주소가 충돌할 위험이 있음.라우팅이 바뀌고 커넥션과 연관된 패킷들이 다른 서버들로 보내진다면 TCP 커넥션이 깨질수 있습니다. |
아이피 맥(MAC) 포워딩 | 패킷이 리다이렉트 되어야 한다면, 스위치는 그 패킷에게 서버나 프락시의 목적지 MAC 주소를 줍니다. | 대역폭을 절약하고 서비스 품질을 개선합니다. load balancing | 서버나 프록시는 반드시 한 홉 거리에 있어야 합니다. |
IP 주소 포워딩 | 레이어 4(L4)스위치는 패킷의 목적지 포트를 평가하고, 리다이렉트 패킷의 IP주소를 프락시나 미러링된 서버의 IP주소로 바꿉니다. | 대역폭을 절약하고 서비스 품질을 개선합니다. load balancing | 서버나 프락시가 클라이언트의 IP주소를 잃어버릴 수 있습니다. |
메커니즘 | 어떻게 동작하는가 | 재라우팅의 근거 | 제약사항 |
---|---|---|---|
명시적인 브라우저 설정 | 웹 브라우저는 가까운 프락시(보통 캐시)에게 HTTP 메시지를 보내도록 설정됩니다. | 대역폭을 절약하고 QOS 개선, 부하균형 | 브라우저의 설정 능력에 의존 |
프록시 자동 설정 | 웹브라우저는 설정 서버로부터 PAC 파일을 검색, PAC 파일은 브라우저에게 각 url에 대해 어떤 프락시를 사용해야 하는지 알려주게 됩니다. | 대역폭을 절약하고 QOS 개선, 부하균형 | 브라우저의 설정 능력에 의존 |
웹 프락시 자동발견 프로토콜 | 웹브라우저는 설정 서버에게 PAC파일에 대한 URL을 물어봅니다. PAC만 사용할때와 달리 브라우저에 특정 설정 서버가 설정되어야 할 필요가 없습니다. | 설정 서버는 HTTP 요청헤더에서 얻은 정보에 근거해 PAC 파일의 URL을 결정합니다. | |
웹 캐시 조직 프로토콜 | 라우터는 패킷의 목적지 주소를 평가하고 프락시나 미러링된 서버의 IP주소와 함께 리다이렉트 패킷을 캡슐화합니다. | 대역폭을 절약하고 QOS를 개선, 부하균형(Load balancing) | 반드시 이를 지원하는 브라우저를 사용해야 함 |
인터넷 캐시 프로토콜 | 프락시 캐시는 형제 캐시의 무리에게 요청받은 콘텐츠에 대해 질의 할 수있고, 캐시계층을 지원합니다. | 형제 혹은 부모 캐시로부터 콘텐츠를 얻는 것은 원서버로부터 얻는것보다 빠릅니다. | 콘텐츠를 요청할때 오직 URL만을 사용하기 때문에 캐시 적중이 아님에도 적중인것처럼 동작할 우려가 있음. |
캐시 배열 라우팅 프로토콜 | 프락시 캐시 해싱 프로토콜. 캐시가 요청을 부모캐시로 전달할수 있도록 해줌 | 형제 혹은 부모 캐시로부터 콘텐츠를 얻는 것은 원서버로부터 얻는것보다 빠릅니다. | 형제 관계의 캐시를 지원할수 없음. 모든 CARP 클라이언트는 반드시 설정에 동의해야함(그렇지 않으면 같은 URI를 다른 부모에게 되어 캐시 적중률 감소할 가능성 높음) |
하이퍼텍스트 캐싱 프로토콜 | 참여하는 프록시 캐시는 형제 캐시의 무리에게 요청받은 콘텐츠에 대해 질의할수 있음. | 형제 혹은 부모 캐시로부터 콘텐츠를 얻는 것은 원서버로부터 얻는것보다 빠릅니다. |
HTTP 리다이렉션
DNS 라운드 로빈
ns look up을 활용해 확인한 IP address farm
다중 주소와 라운드 로빈 주소 순환
ns look up을 활용해 DNS 주소목록 순회 확인
다른 DNS 기반 리다이렉션 알고리즘
위와 같은 복잡한 서버 추적 알고리즘을 실행하고 있는 DNS 서버는 권위있는 서버(authoritative server)
라고 불리는 dns ㄴ서버(top level domain server)입니다.
사진 참고: https://umbrella.cisco.com/blog/2014/07/16/difference-authoritative-recursive-dns-nameservers/
최단거리
라우팅 능력에 의지홉 거리
: 홉(hop)은 컴퓨터 네트워크에서 출발지와 목적지 사이에 위치한 경로의 한 부분이다. 데이터 패킷은 브리지, 라우터, 게이트웨이를 거치면서 출발지에서 목적지로 경유한다. 패킷이 다음 네트워크 장비로 이동할 때마다 홉이 하나 발생한다. 홉 카운트(hop count)는 데이터가 출발지와 목적지 사이에서 통과해야 하는 중간 장치들의 개수를 가리킨다.
콘텐츠에 접근할때 프락시를 통할 필요가 있는 경우도 있으며(보안상의 이유), 클라이언트가 이용하면 유익한 프락시 캐시가 네트워크에 있을 수 있습니다.
대부분의 브라우저에는 프락시 서버에 접촉하기 위해 프락시 이름, 아이피 주소, 포트번호를 설정할수 있는 풀다운 메뉴 존재함.
명시적 브라우저 설정 단점
올바른 프락시 서버에 접촉하기 위해 브라우저가 동적으로 자신을 설정할수 있게 하는 방식. 이를 프락시 자동설정(Proxy Auto-configuration, PAC)
프로토콜이라고 부릅니다.
PAC에 기본으로 깔려 있는 기본 아이디어는, 브라우저들이 URL별로 접촉해야 할 프락시를 지정한 PAC파일이라 불리는 특별한 파일을 찾도록 하는것입니다.
PAC파일은 아래 함수를 반드시 정의해야 하는 자바스크립트 파일입니다.
function FindProxyForURL(url, host)
브라우저는 요청된 URL마다 아래의 함수를 호출하게 됩니다. 반환된 값은 접촉할 프락시들의 목록이거나, 브라우저가 어떤 프락시든 우회해서 원서버로 바로 가야 함을 의미하는 문자열 "DIRECT" 일 수 있습니다.
또한, PAC 프로토콜은 매우 강력한데, 자바스크립트 프로그램은 브라우저에게 dns 주소나 요일인 시각과 같은 호스트명과 관련된 여러 매개변수에 근거하여 프락시를 선택하도록 요구할수 있습니다.
return_value = FindProxyForURL(url, host);
프락시 자동 설정
WPAD 알고리즘
오늘날의 WPAD 명세는 다음의 기법을 순서대로 정의하고 있습니다. 클라이언트는 DHCP를 먼저 시도하고, 그다음이 SLP입니다. 만약 PAC파일을 발견하자 못한다면, 클라이언트는 DNS기반 매커니즘으로 옮겨가게 됩니다.
클라이언트는 이때 DNS SRV, 잘 알려진 호스트명, DNS TXT 레코드 방법을 순회하게 되는데, DNS 쿼리 QNAME은 점점 덜 구체적이게 됩니다. 또한, 모든 DNS LOOKUP은 요청 받은 리소스 종류를 가리키게 되는 wpad 접두어가 붙은 QNAME을 가지게 됩니다.
ex) 실제 desktop.development.ideveloper2.dev
라는 호스트명을 찾을때