Transcript
302 Found 응답 코드를 이용한 HTTP Redirection
목 차
I. 개요
II. HTTP 기본 동작
III. HTTP Redirection을 위한 302 Found
IV. 요약 및 정리
인터넷을 이용하여 검색이나 웹 서핑, 메일 송수신 등의 정보 교환은 웹 브라우저와 웹 서버 사이의 통신으로 이루어지며, 이를 위한 표준 프로토콜은 HTTP(Hypertext Transfer Protocol)이다. 이 HTTP 메시지에 ‘302 Found’ 응답 코드를 이용하여 부하 분산이나 사용자 인증 등의 목적으로 사용자의 요청에 대해 자동적으로 특정 페이지를 제공하는 것이 가능하며 그 방법이 HTTP 302 Redirection 기술이다. 본 문서에서는 HTTP의 기본 동작 과정과 ‘302 Found’ 응답 코드를 이용한 HTTP Redirection 동작 원리를 살펴보고자 한다.
2010년 9월 20일
NMC Consulting Group (tech@netmanias.com)
I. 개요
우리에게 인터넷이라는 용어는 이제 더 이상 낯설지 않다. 거의 모든 기업이나 조직의 업무가 인터넷을 기반으로 하고 있을 뿐만 아니라, 검색이나 메일을 보내기 위해 사용하던 기존의 단조로운 목적에서 벗어나 인터넷 뱅킹, 인터넷 쇼핑 등 인터넷은 자연스러운 일상이 되었다. 최근에는 페이스북(Facebook)이나 트위터(Twitter)와 같은 소셜 네트워크의 등장으로 웹 상에서 더욱 더 다양한 일들이 가능해지고 있다. 이러한 인터넷 상에서의 다양한 정보들은 네트워크 세상에서 HTTP(Hypertext Transfer Protocol[1])라는 프로토콜을 통해 전달된다.
저자 역시 웹 검색을 위해 야후(www.yahoo.com) 웹 서버를 이용하는 경우가 있다. 그런데, 놀라운 것은 분명 ‘www.yahoo.com’이라는 주소를 입력하여 요청했는데, 화면에 나타난 야후 홈페이지의 인터넷 주소는 ‘kr.yahoo.com’으로 변경되어 있었다. 무슨 일이 벌어진 것일까?
인터넷 세상에서는 이것을 HTTP Redirection이라고 한다. 즉, 사용자가 요청한 페이지가 아닌 다른 페이지 혹은 다른 서버로 접속하도록 유도하는 기술이다. 본 문서에서는 이와 같은 HTTP Redirection이 어떠한 용도로 사용되고, 어떻게 동작하는지 살펴보고자 한다. II 장에서 HTTP의 기본 동작에 대해 설명하고, III 장에서는 ‘302 Found’ 코드를 이용한 HTTP Redirection에 대해 실제 메시지 흐름을 기반으로 기술하며, IV 장에서 해당 기술을 요약 및 정리한다.
II. HTTP 기본 동작
인터넷을 이용하여 검색이나 웹 서핑, 메일 송수신 등의 웹 애플리케이션을 사용하기 위해서는 PC에 설치되어 있는 웹 브라우저(가장 대표적인 것이 Windows의 Internet Explorer, Google의 Chrome)를 통해 웹 서버와 통신을 하게 된다. 이와 같이 사용자의 웹 브라우저와 웹 서버 사이에 정보를 주고받기 위한 표준 프로토콜이 HTTP이다.
웹 브라우저를 통해 사용자가 웹 서버에 접속하여 서비스를 이용하기 위한 HTTP의 기본 동작 과정은 그림 1과 같다.
그림 1. HTTP 기본 동작 과정
1. Web Browsing
사용자가 Internet Explorer나 Chrome과 같은 웹 브라우저를 실행시키고, 원하는 인터넷 서비스(이 예제에서는 네이버에 접속)를 사용하기 위해 URL(Uniform Resource Locator)을 입력/요청한다.
2. DNS Query
웹 브라우저는 사용자가 요청한 URL, 즉 네이버(www.naver.com) 서버에 접속하기 위해 DNS (Domain Name System) Query 메시지를 통해 해당 웹 서버의 IP 주소를 DNS 서버에게 물어본다.
3. DNS Response
DNS Query 메시지를 수신한 DNS 서버는 해당 URL의 IP 주소(202.131.29.70)를 DNS Response 메시지에 담아 웹 브라우저로 알려준다.
4. TCP Connection
DNS Response 메시지를 통해 웹 서버의 IP 주소를 알게 된 웹 브라우저는 3-way Handshaking (SYN – SYN/ACK – ACK) 과정을 통해 해당 웹 서버와의 TCP 연결을 생성한다.
5. HTTP GET
TCP 세션이 생성되면, 웹 브라우저는 웹 서비스 요청을 위해 HTTP GET 메시지를 웹 서버로 전송한다.
6. HTTP/1.1 200 OK
HTTP GET 메시지를 수신한 웹 서버는 텍스트, 이미지 등이 포함된 HTTP/1.1 200 OK 메시지 (HTTP/1.1은 HTTP 버전 1.1을 나타내며, 현재 가장 많이 사용되고 있음)를 웹 브라우저로 전달한다.
7. TCP Disconnection
HTTP 메시지 교환 이후 해당 서버와 더 이상의 통신이 없으면, 위의 4번 과정에서 생성했던 TCP 연결을 해제한다.
8. Rendering
HTTP/1.1 200 OK 메시지를 수신한 웹 브라우저는 메시지에 포함된 텍스트, 이미지 파일 등의 정보를 확인하고 사용자가 볼 수 있도록 내용을 화면에 뿌려준다. 이때 하나의 웹 페이지를 구성하는 데이터가 여러 서버/URL에 나누어져 있으면, 그림 1의 2~6 과정을 여러 번 거쳐 해당 데이터를 받아와서 사용자 화면에 Rendering해준다. 이 예제에서는 이미지 데이터가 다른 서버에 위치하여 해당 데이터가 처음에는 Rendering되지 않았다가 DNS 및 HTTP 메시지 교환(9~15 과정)을 통해 이미지 데이터를 수신한 후 Rendering한다.
그림 1의 HTTP 기본 동작 과정에서 웹 브라우저의 HTTP 요청 메시지에 대한 웹 서버의 HTTP 응답 메시지는 표 1과 같은 카테고리로 구분된다.
표 1. HTTP/1.1 응답 메시지 내 응답 코드
카테고리 코드 설명
1xx Informational 클라이언트의 요청에 대한 임시적 응답으로, 정보 전달을 목적
2xx Success 클라이언트의 요청이 성공적으로 처리되었음을 전달
3xx Redirection 클라이언트의 요청을 위해 추가적으로 수행되어야 하는 동작을 전달
4xx Client Error 클라이언트의 요청에 오류가 있음을 전달
5xx Server Error 클라이언트의 요청을 처리할 수 없거나, 서버에서의 오류 발생을 전달
III. HTTP Redirection을 위한 302 Found
HTTP의 기본 동작 과정에서 살펴본 것과 같이 HTTP 응답 메시지에 ‘200 OK’ 응답 코드를 이용하여 대부분의 웹 서비스가 제공되고 있다. 하지만 I 장의 개요에서 언급했듯이, 야후(www.yahoo.com) 웹 서버로 접속을 시도하면, 실제로는 ‘kr.yahoo.com’이라는 서버로 접속하게 된다(물론 ‘kr.yahoo.com’ 서버는 ‘200 OK’라는 응답 코드를 HTTP 응답 메시지에 정상적으로 담아 보냈다).
이는 야후 서버가 ‘kr.yahoo.com’이라는 서버로 접속하라는 의미의 ‘302 Found’ 응답 코드를 HTTP 응답 메시지 내에 담아 보내기 때문이다. 이와 같은 HTTP 302 Redirection은 로드 밸런싱(Load Balancing)이나 웹 기반의 사용자 인증 등의 용도로 많이 사용된다.
1) 로드 밸런싱(Load Balancing)
‘www.yahoo.com’ 서버는 하나의 서버에 부하가 몰리는 것을 분산시키기 위해 사용자의 상태(HTTP GET 메시지 내에 있는 언어/지역 정보 등)에 따라 다른 서버로 Redirection 시킴
2) 사용자 인증(User Authentication)
사용자 인증을 목적으로 특정 인증 서버로 Redirection 시킴
이에 본 문서에서는 Redirection을 수행하기 위한 기술 가운데 HTTP 응답 메시지에 ‘302 Found’ 응답 코드를 이용한 HTTP 302 Redirection에 대해 기술하며, 앞서 언급했던 야후 웹 서버의 Redirection 사례를 바탕으로 설명한다.
3.1 사용자의 요청에 대한 HTTP/1.1 302 Found 메시지 전송
앞서 HTTP의 기본 동작에서 살펴보았듯이, 웹 브라우저는 사용자가 요청한 URL의 웹 서버 IP 주소를 받기 위해 DNS 서버와 DNS 메시지를 교환한다. 이를 통해 획득한 해당 웹 서버의 IP 주소를 이용하여 TCP 연결을 생성하고, HTTP 메시지를 주고 받는다. HTTP 메시지 교환이 끝나면 앞서 생성되었던 TCP 연결을 해제한다. 이러한 과정을 보다 이해하기 쉽도록 그림 2와 같이 도식화 하였다.
그림 2. 사용자 요청에 대한 HTTP/1.1 302 Found 메시지 전송 과정
1. HTTP GET
웹 브라우저는 해당 서버(www.yahoo.com)에 HTTP 데이터를 요청하는 HTTP GET 메시지를 전송하며, 상세 내용은 그림 3과 같다.
Frame 8: 592 bytes on wire (4736 bits), 592 bytes captured (4736 bits)
Ethernet II, Src: SamsungE_5c:2c:c4 (00:24:54:5c:2c:c4), Dst: EfmNetwo_ee:00:c8 (00:08:9f:ee:00:c8)
1 Internet Protocol, Src: 192.168.10.13 (192.168.10.13), Dst: 98.137.149.56 (98.137.149.56)
Transmission Control Protocol, Src Port: wwiotalk (5413), Dst Port: http (80), Seq: 1, Ack: 1, Len: 538
2 Hypertext Transfer Protocol
GET / HTTP/1.1\\r\\n
[Expert Info (Chat/Sequence): GET / HTTP/1.1\\r\\n]
Request Method: GET
Request URI: /
Request Version: HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif,
application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-
shockwave-flash, application/vnd.ms-excel, application/msword,
application/vnd.ms-powerpoint, */*\\r\\n
3 Accept-Language: ko-KR\\r\\n
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0;
SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center
PC 6.0; InfoPath.2; .NET4.0C) Chrome/12.0.742.91 Safari/534.30\\r\\n
Accept-Encoding: gzip, deflate\\r\\n
4 Host: www.yahoo.com\\r\\n
Connection: Keep-Alive\\r\\n
\\r\\n
그림 3. 웹 브라우저가 웹 서버 www.yahoo.com에 전달한 HTTP GET 메시지
1) 이 HTTP GET 메시지는 사용자 PC, 즉 웹 브라우저(192.168.10.13)에서 웹 서버 www.yahoo.com(98.137.149.56)로 전송된 것을 확인할 수 있고,
2) GET 메소드를 사용한 버전 1.1의 HTTP 메시지인 것을 확인할 수 있으며,
3) 클라이언트 사용자가 한글(언어)을 사용하는 한국(지역)에 속해있음을 Accept-Language 코드(그림 4와 표 2 참조) 값을 통해 확인할 수 있고,
4) 접속하고자 하는 웹 서버는 www.yahoo.com, 즉 사용자가 웹 브라우저를 통해 요청했던 URL임을 확인할 수 있다.
그림 4. HTTP GET 메시지 내 Accept-Language 코드 내용
표 2. HTTP GET 메시지 내 Accept-Language 코드 샘플
코드 설명
en_US 언어는 영어 / 지역은 미국
en_CA 언어는 영어 / 지역은 캐나다
kr_KR 언어는 한국어 / 지역은 한국
de_DE 언어는 독일어 / 지역은 독일
… …
2. HTTP/1.1 302 Found
HTTP GET 메시지를 수신한 웹 서버는 웹 브라우저가 요청한 HTTP 정보들을 전달받기 위해서는 다른 서버로 접속하라는 Redirection 응답 코드인 ‘302 Found’와 이동시킬 새로운 웹 서버의 위치 정보(URL)를 HTTP 응답 메시지에 담아 웹 브라우저로 전송하며, 상세 내용은 그림 5와 같다.
Frame 10: 1127 bytes on wire (9016 bits), 1127 bytes captured (9016 bits)
Ethernet II, Src: EfmNetwo_ee:00:c8 (00:08:9f:ee:00:c8), Dst: SamsungE_5c:2c:c4 (00:24:54:5c:2c:c4)
1 Internet Protocol, Src: 98.137.149.56 (98.137.149.56), Dst: 192.168.10.13 (192.168.10.13)
Transmission Control Protocol, Src Port: http (80), Dst Port: wwiotalk (5413), Seq: 1, Ack: 539, Len: 1073
2 Hypertext Transfer Protocol
HTTP/1.1 302 Found\\r\\n
[Expert Info (Chat/Sequence): HTTP/1.1 302 Found\\r\\n]
Request Version: HTTP/1.1
Response Code: 302
Date: Wed, 15 Sep 2010 02:18:59 GMT\\r\\n
Set-Cookie: B=9bu43ll6uue2n&b=3&s=o3; expires=Sat, 15-Sep-2012 20:00:00 GMT;
path=/; domain=.yahoo.com\\r\\n
P3P: policyref=\"http://info.yahoo.com/w3c/p3p.xml\", CP=\"CAO DSP COR CUR ADM DEV
TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI
PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV\"\\r\\n
Vary: User-Agent,Accept-Encoding\\r\\n
Cache-Control: private\\r\\n
Set-Cookie: IU=deleted; expires=Tue, 15-Sep-2009 08:52:38 GMT; path=/;
domain=.yahoo.com\\r\\n
[truncated] Set-Cookie:
fpc=d=a_z3Z74tF_hH9EnEIXOqLOaDC5mm1OKO4a0Sfz1V56em8YgN.qrDIvNT6hbjlZATI9G86Okl4UR
Bkqoiz9or3.5wv.IdUHSzkZKgpXDDffQYh3y0_LQeviyGpeUaqDqfhXyrp0HwrKUZeiTvg11WO.ujOk2m
5Msz9ELoejEzfj4C07NnwQTUvKG6Oynb.TVF8t34Wu4-&v=2; exp
3 Location: http://kr.yahoo.com/?p=us\\r\\n
Content-Type: text/html; charset=utf-8\\r\\n
Age: 0\\r\\n
Transfer-Encoding: chunked\\r\\n
Connection: keep-alive\\r\\n
Server: YTS/1.20.0\\r\\n
\\r\\n
HTTP chunked response
Line-based text data: text/html
그림 5. www.yahoo.com 웹 서버가 웹 브라우저에 전달한 HTTP 302 Found 메시지
1) 본 메시지는 웹 서버 www.yahoo.com(98.137.149.56)에서 사용자 PC, 즉 웹 브라우저(192.168.10.13)로 전송된 것을 확인할 수 있고,
2) ‘302 Found’ 응답 코드를 담은 버전 1.1의 HTTP 메시지인 것을 확인할 수 있으며,
3) 요청했던 웹 서버의 HTTP 정보들을 수신하기 위해서는 사용자 상태에 맞는 새로운 웹 서버 kr.yahoo.com(일반적으로 웹 서버가 수신했던 HTTP GET 메시지 내의 Accept-Language 정보를 이용하여 결정함)으로 접속하라는 위치 정보를 포함하고 있는 것을 확인할 수 있다.
3.2 Redirection 이후, 새로운 서버와의 HTTP 메시지 교환
HTTP/1.1 302 Found 메시지를 수신한 웹 브라우저는 해당 메시지 내에 포함되어 있는 위치 정보를 통해 새로운 웹 서버의 IP 주소를 DNS 연동을 통해 획득하고, TCP 연결을 생성한 후 그림 6과 같이 HTTP 메시지 교환을 수행한다. HTTP 메시지 교환이 끝나면 앞서 생성되었던 TCP 연결을 해제한다.
그림 6. Redirection 이후 새로운 서버와의 HTTP 메시지 교환 과정
3. HTTP GET
웹 브라우저는 새로운 웹 서버(kr.yahoo.com)에 HTTP 데이터를 요청하는 HTTP GET 메시지를 전송하며, 상세 내용은 그림 7과 같다.
Frame 16: 630 bytes on wire (5040 bits), 630 bytes captured (5040 bits)
Ethernet II, Src: SamsungE_5c:2c:c4 (00:24:54:5c:2c:c4), Dst: EfmNetwo_ee:00:c8 (00:08:9f:ee:00:c8)
1 Internet Protocol, Src: 192.168.10.13 (192.168.10.13), Dst: 111.67.226.84 (111.67.226.84)
Transmission Control Protocol, Src Port: statusd (5414), Dst Port: http (80), Seq: 1, Ack: 1, Len: 576
2 Hypertext Transfer Protocol
GET /?p=us HTTP/1.1\\r\\n
[Expert Info (Chat/Sequence): GET /?p=us HTTP/1.1\\r\\n]
Request Method: GET
Request URI: /?p=us
Request Version: HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif,
application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-
shockwave-flash, application/vnd.ms-excel, application/msword,
application/vnd.ms-powerpoint, */*\\r\\n
Accept-Language: ko-KR\\r\\n
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0;
SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center
PC 6.0; InfoPath.2; .NET4.0C) Chrome/12.0.742.91 Safari/534.30\\r\\n
Accept-Encoding: gzip, deflate\\r\\n
3 Host: kr.yahoo.com\\r\\n
Connection: Keep-Alive\\r\\n
Cookie: B=9bu43ll6uue2n&b=3&s=o3\\r\\n
\\r\\n
그림 7. 웹 브라우저가 새로운 웹 서버 kr.yahoo.com에 전달한 HTTP GET 메시지
1) 본 메시지는 사용자 PC, 즉 웹 브라우저(192.168.10.13)에서 새로운 웹 서버 kr.yahoo.com (111.67.226.84)로 전송된 것을 확인할 수 있고,
2) GET 메소드를 사용한 버전 1.1의 HTTP 메시지인 것을 확인할 수 있으며,
3) 접속하고자 하는 웹 서버는 kr.yahoo.com, 즉 HTTP 302 Found 메시지에 담겨있던 위치 정보에 해당하는 URL임을 확인할 수 있다.
4. HTTP/1.1 200 OK
HTTP GET 메시지를 수신한 웹 서버는 웹 브라우저가 요청한 HTTP 정보들을 담아 ‘200 OK’ 응답 코드를 담은 HTTP 응답 메시지를 웹 브라우저로 전송하며, 상세 내용은 그림 8과 같다.
Frame 79: 927 bytes on wire (7416 bits), 927 bytes captured (7416 bits)
Ethernet II, Src: EfmNetwo_ee:00:c8 (00:08:9f:ee:00:c8), Dst: SamsungE_5c:2c:c4 (00:24:54:5c:2c:c4)
1 Internet Protocol, Src: 111.67.226.84 (111.67.226.84), Dst: 192.168.10.13 (192.168.10.13)
Transmission Control Protocol, Src Port: http (80), Dst Port: statusd (5414), Seq: 60556, Ack: 577, Len: 873
[Reassembled TCP Segments (61428 bytes): #19(1460), #20(1429), #22(1460), #23(758), #25(1428), #26(1460), #28(1460), #29(1460), #30(1460), #32(1460), #33(1460), #34(1460), #36(1460), #37(1460), #39(1460), #40(1460), #42(1460), #43(1460), #4]
2 Hypertext Transfer Protocol
HTTP/1.1 200 OK\\r\\n
[Expert Info (Chat/Sequence): HTTP/1.1 200 OK\\r\\n]
Request Version: HTTP/1.1
Response Code: 200
Date: Wed, 15 Sep 2010 02:18:59 GMT\\r\\n
P3P: policyref=\"http://info.yahoo.com/w3c/p3p.xml\", CP=\"CAO DSP COR CUR ADM DEV
TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI
PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV\"\\r\\n
Vary: User-Agent,Accept-Encoding\\r\\n
Cache-Control: private, no-cache, no-store\\r\\n
Set-Cookie: IU=deleted; expires=Tue, 15-Sep-2009 02:18:58 GMT; path=/;
domain=.yahoo.com\\r\\n
Set-Cookie: PH=deleted; expires=Tue, 15-Sep-2009 02:18:58 GMT; path=/;
domain=.yahoo.com\\r\\n
[truncated] Set-Cookie:
fpc=d=1QgVCisiF_hoE7GI8k_TtZkIOOk79DSBUUqE.Ff74eCqOPxUS.8RU_v6cIOFYYEZIpYI8jbKogD
BDcRfmr1xeFAhIoye.3DM8qpq3o34HfwygSyEOYU..NF6G1CHIE7L8zc9Dcuzs_gMyfpD0Wf0QoQVV1Kh
_wf56Udwd40Yj3vXwmQLyYnHgZlOHWsrffQsSPSoY74-&v=2; exp
Set-Cookie: CH=deleted; expires=Tue, 15-Sep-2009 02:18:58 GMT; path=/;
domain=kr.yahoo.com\\r\\n
Set-Cookie:
CH=AgBN7zgQAAyOEAAVRRAAJGYQAD6dEAAtCRAABakQACUoEAA2nhAAImEQADWIEAARZRAANVIQAAXDEA
AgQRAAN4UQACx4EAAvGxAACksQAChZEAAFiA==; expires=Web, 15-Sep-2010 02:18:59 GMT;
path=/; domain=.yahoo.com\\r\\n
[truncated] Set-Cookie:
fpt=d=65si5WvXesyflsLu87OpvuRuxj3kS3WZSWPnC5IAabAqSFzgwq6JmKH8AVillYecpTvVtTp63I6
hL52Fu4jIXYgy4IpNdbEs_iRf7B6PL8W3VhC2.NrYuxj4X9892gxnX7koDpEgE67tlPL7yEBt4mREpO6O
YttksYvYYVTxJXvtzC3lMNgGDRbajnvAInBUndkWS4qBTlgnh3W6f
[truncated] Set-Cookie:
fpc=d=A0.94h4iF_jiG._Y1i6NXU.l3QcrKLutffJno8GXpXZ4t36cGeJ2wA5BhQ1PpiuHhCGaY4CqzvT
Yy961KYSZEW4cESDa8gMgW3Z_.wY1KUDEWOhwGB9.rGSO50sE5O3G5u.SnrMmQUkniuvLPcDoDY4zvZ2n
pf6Yh.b441S58f0KMs1a7Orb95lZEpuOLgUOlvpSBgBQwK98dJgov
Set-Cookie: fpps=_page=%7B%22wsid%22%3A%2221445690%22%7D; expires=Thr, 15-Sep-
2011 02:18:59 GMT; path=/; domain=kr.yahoo.com\\r\\n
[truncated] Set-Cookie:
fpc_s=d=x.pSRNAiF_hJ0yoKrDO5uH8DiGiRpX5gPPXMpkZqwPmN9EkAQzMeC_ImP24x66vQO3jNQTT3q
Lh7gUo4wbkoG6XSXTsXpt810zE10ecgPdg2kRLnu.RErtcQdBVX9HMMwVukIPrueVWMySESNIlj8tc3zc
n8_GeFg.S6il9kdFsP9RKfJhUcLWPnrTav69wlQdoItVvrOC91_HX
Content-Type: text/html;charset=utf-8\\r\\n
Content-Encoding: gzip\\r\\n
Age: 0\\r\\n
Transfer-Encoding: chunked\\r\\n
Connection: keep-alive\\r\\n
Server: YTS/1.20.0\\r\\n
\\r\\n
HTTP chunked response
Content-encoded entity body (gzip): 58541 bytes -> 261952 bytes
Line-based text data: text/html
그림 8. 새로운 웹 서버 kr.yahoo.com가 웹 브라우저로 전달한 HTTP 200 OK 메시지
1) 본 메시지는 웹 서버(kr.yahoo.com, 202.131.29.70)에서 사용자 PC, 즉 웹 브라우저(192.168.10.13)로 전송된 것을 확인할 수 있고,
2) ‘200 OK’ 응답 코드를 담은 버전 1.1의 HTTP 메시지인 것을 확인할 수 있다.
IV. 요약 및 정리
본 기술 문서에서는 ‘302 Found’ 응답 코드를 이용한 HTTP redirection의 동작 과정을 실제 캡쳐된 메시지들을 기반으로 살펴보았으며, 해당 과정을 간단히 도식화 하면 그림 9와 같이 표현할 수 있다.
그림 9. 302 Found 응답 코드를 이용한 HTTP Redirection 요약
Web Browsing: 1) 사용자가 접속하고자 하는 URL(www.yahoo.com)을 웹 브라우저에 입력한다.
DNS 서버에 IP 주소 질의: DNS 서버를 통해 2) 접속하고자 하는 웹 서버(www.yahoo.com)의 IP 주소를 획득한다.
웹 서버와의 HTTP 메시지 교환: 3) 웹 브라우저가 HTTP 데이터 요청을 전달하고, 웹 서버는 필요에 따라 사용자의 HTTP 요청을 다른 웹 서버로 redirection 시키기 위해 ‘302 Found’ 응답 코드(kr.yahoo.com)를 HTTP 응답 메시지에 담아 보낸다.
Redirect 이후, DNS 서버에 IP 주소 질의: 4) HTTP/1.1 302 Found 메시지에 담겨온 새로운 서버의 URL(kr.yahoo.com)을 가지고 DNS를 통해 IP 주소를 획득한다.
새로운 웹 서버와의 HTTP 메시지 교환: 5) 웹 브라우저는 새로운 웹 서버(kr.yahoo.com)에게 HTTP 데이터 요청 메시지를 전달한다. 이에 서버는 정상적인 응답으로 ‘200 OK’ 코드를 HTTP 응답 메시지에 담아 보낸다.
Rendering: 웹 브라우저는 정상적으로 처리된 HTTP 응답 메시지를 기반으로 6) 사용자에게 HTTP 데이터를 화면에 뿌려준다.
참고문헌
[1] R. Fielding et. al., “Hypertext Transfer Protocol – HTTP/1.1”, RFC 2616, Standard, June 1999.