우클릭방지

글 목록

2017년 7월 4일 화요일

[HTTP 프로토콜 강좌]#5 HTTP 요청방식 OPTIONS,HEAD,TRACE

지난 토요일. 아이들 둘 데리고 캠핑을 다녀왔다. 남양주에 위치한 수동계곡.. 
서울에서 가까워 당일치기로 다녀올수 있어서 좋은것 같다. 

일요일부터는 장마비가 내리기 시작한다. 그래도 올해는 마른장마는 아닌가보다. 
이틀째 밤만되면 비가 쏟아 붇는다. 때문에 빗소리에 새벽에 잠에서 깨긴하지만.. 수동계곡에서 계곡물의 양을 보고 온터라 그런지 내리는 비가 반갑다. ^^

각설하고.. 
오늘은 HTTP 요청 방식 중 OPTIONS, HEAD, TRACE를 이야기 해보려 한다. 
이전 포스팅에서 다룬 GET,POST,PUT,DELETE는 사용자가 웹서버로 직접적인 액션을 취하는 요청 방식이었다면.. 그러니까 주인공 느낌이랄까?
반면, OPTIONS,HEAD,TRACE는 약간 조연 느낌이다. 

웹서버는 클라이언트에게 제공할 여러가지 컨텐츠를 준비하고 있고, 클라이언트가 요청하면 즉시 해당되는 컨텐츠를 제공하게 된다. 이러한 컨텐츠 기반에서 직접적인 액션을 취하는게 GET,POST,PUT,DELETE 이다.

OPTIONS와 HEAD, TRACE는 웹서버가 컨텐츠를 서비스 하기 위한 환경적인 요소를 확인하기 위한 Method 라고 보면 될것 같다. 웹서버에 어떤 문제가 있을 시 문제를 진단하기 위해 사용된다. 

1. OPTIONS

여러가지 HTTP 요청 방식(Method)가 있는데, 과연 웹서버에서는 어떤 요청방식을 지원할까?
지원하지 않는 요청방식이 있는건 아닐까? 확인이 필요할 수 있다. 

OPTIONS는 웹서버에서 지원하는 HTTP 요청방식을 확인하고자 할때 사용할 수 있는 Method이다. 동작 방식은 아래와 같다. 


클라이언트가 OPTIONS 라는 요청 메소드와 URI를 웹서버로 전달하면, 웹서버는 서버가 지원하는 HTTP 요청방식을 응답헤더에 포함하여 클라이언트에게 응답한다. 

아래 캡쳐 이미지를 확인해보자. 
텔넷을 통해 OPTIONS 요청방식을 사용해봤다. 웹서버에서는 "Allow" 응답헤더에 지원하는 Method를 포함한 것을 볼수 있다. 



2. HEAD

HEAD 요청방식은 먼저 살펴봤던 GET 방식과 비슷하다. HEAD와 GET 간의 차이는 클라이언트가 요청한 URI에 포함된 컨텐츠의 전달 여부이다. 

GET은 당연히 컨텐츠를 클라이언트에게 전달하지만, HEAD는 전달하지 않는다. 
HEAD는 클라이언트가 요청한 URI에 해당되는 응답헤더만 전달한다. 
(HEAD는 header의 축약어라고 어떤 문서에서는 이야기한다. 클라이언트에게 컨텐츠를 제외한 응답헤더만 전달한다는... )

동작방식은 아래와 같다. 


위 그림에서 보듯이 응답에 DATA가 빠져있다. 

그럼 HEAD는 어떤 경우에 사용할 수 있을까?
HEAD는 흔히 클라이언트가 요청한 URI의 컨텐츠가 웹서버에 존재하는지 여부를 확인할수 있다. 앞서 설명했듯이 응답헤더만 전달받게 되는데, 상태코드가 200 OK 면 컨텐츠가 웹서버에 존재하는것이고, 404는 웹서버에 존재 하지 않는것을 의미한다.
(상태코드에 대해서는 이후 포스팅에서 자세히 다루도록 할것이므로, 200 OK는 정상.. 나머지는 비정상(에러).. 이정도만 이해해도 좋다.)



웹페이지내의 링크 유효성 체크 프로그램을 만들어 실제 링크가 유효한지 아닌지를 확인할 수도 있고, L7 스위치등에서 간단히 실제서버의 어플리케이션 레벨 헬스체크를 수행할때도 HEAD 메소드를 사용할 수 있다.


3. TRACE

TRACE 요청방식은 웹서버로 가는 네트워크 경로를 체크하는 메소드이다. 웹서버와 클라이언트 사이에 중간서버(웹프록시 또는 웹캐시서버등)가 존재할 경우 TRACE 방식을 이용하여 확인할 수 있다. 

동작방식은 아래와 같다. 


클라이언트가 TRACE로 웹서버에 요청을 하면, 중간서버가 이를 먼저 받고 요청 메시지를 그대로 웹서버로 전달한다. 바로 이때, 클라이언트의 요청 메시지에 Via 헤더 정도를 추가하여 전달하는데 Via에는 중간서버의 정보를 포함하게 된다. 

웹서버는 Via가 포함된 클라이언트의 요청메시지를 받게 되면, 요청메시지 전체를 응답데이터에 포함하여 클라이언트에게 전달하게 된다. 

클라이언트가 웹서버로부터 전달된 데이터를 받으면, 데이터에 포함된 Via 정보를 통해 경로상에 중간서버가 존재함을 확인하게 된다. 

아래 캡쳐화면을 통해 실제로 어떻게 동작되는지를 확인해 보자. 


오늘 포스팅을 정리해본다. 
  • OPTIONS 를 통해 웹서버에서 지원하는 HTTP 요청방식을 확인할 수 있다. 
  • HEAD 는 GET과 거의 같지만, URI로 요청한 컨텐츠는 전달 받지 않는다. 응답헤더만 전달 받는 요청방식이다. 
  • TRACE 로는 웹서버로 가는 경로상에 웹프록시나 웹캐시등과 같이 중간서버의 존재를 확인할 수 있다. 

지금까지 HTTP 요청방식으로 GET부터 TRACE까지 총 7가지를 확인해 봤다. 
각각의 요청방식을 하나의 단어로 정리해 보면.. 
  1. GET - 웹페이지 반환
  2. POST - 웹 입력 폼
  3. PUT - 파일업로드
  4. DELETE - 파일 삭제
  5. OPTIONS - 웹지원 메소드
  6. HEAD - 상태 확인
  7. TRACE - 경로 확인
이라 할 수 있겠다. 

다음 포스팅에서는 가상호스트(virtual host)와 리다이렉션(Redirection)에 대해 이야기하려 한다.

댓글 없음:

댓글 쓰기