- HTTP 메시지, 헤더 등
"웹프로그래밍 스터디"라는 주제로 글을 작성하고자 한다. 그동안 공부하고 싶었던 주제를 정리했는데, 웹개발의 전반적인 내용이 포함될 예정이다. 아마 바쁘다는 핑계로 글 올라오는 속도가 매우 느릴 수 있다. 하루에 한시간씩이라도 시간을 내서 스터디 해야한다!! 라고 내 자신에게 다짐해본다. 아래와 같은 목차로 진행 예정이며, 목차는 변경 될 수는 있다.
https://brunch.co.kr/@springboot/15
HTTP 메시지는 HTTP 애플리케이션 간에 주고받은 데이터이다. HTTP 메시지는 Request(요청), Response(응답) 메시지로 나눌수 있는데, 둘다 아래와 같은 형식으로 구성된다.
시작줄(Start Line)
헤더(Header)
본문(Body)
시작줄에 대해서는 번역서마다 다르게 표현을 했다. [HTTP 완벽 가이드-인사이트] 에서는 "시작줄" 이라고 번역을 하였다. [웹을 지탱하는 기술-멘토르 출판사]에서는 "스타트 라인" 이라고 표현한다. [그림으로 배우는 HTTP&Network Basic-영진닷컴] 에서는 원서에서 시작줄을 메시지 헤더에 포함하였고 "리퀘스트 라인 또는 상태 라인" 이라는 표현을 사용한다. Request(요청) 메시지의 경우에는 서버에게 무엇을 해달라고 부탁하며 형식은 아래와 같다.
<메서드> <요청 URL> <버전>
GET /resource/a.png 1.1
요청 메시지의 메서드는 GET 이며, 요청 URL 은 /resource/a.png , 버전은 HTTP 1.1 이다. 메서드의 종류는 GET, HEAD, POST, PUT, TRACE, OPTIONS, DELETE 이다. 대부분 개발자가 잘 알고 있을거라 생각된다. GET은 리소스의 취득을 의미하며 가장 많이 사용하는데 지정한 URI의 정보를 가져온다. 자세하게 알고 싶다면 [HTTP 완벽가이드-인사이트] 서적을 꺼내보길 바란다.
응답 메시지의 형식은 아래와 같다. 버전, 상태코드, 사유구절 로 구성된다.
<버전> <상태 코드> <사유 구절>
HTTP 1.1 200 OK
HTTP 버전은 1.1 이고 상태 코드는 200(성공), 사유 구절은 OK로 문서가 성공적으로 응답한다는 의미이다. 꼭 알아야 할 상태코드는 200, 302, 304, 400, 403, 500, 503 등이다. 상태 코드는 [HTTP 완벽가이드] 의 588page 에 정리가 되어있다. 사유 구절은 상태코드와 일대일로 대응되며, 사용자에게 요청 중에 무슨 일이 일어났는지 알려주기 위한 텍스트 구문이다. [웹을 지탱하는 기술] 에서는 "사유 구절"을 "텍스트 구문" 으로 번역하였다. 개인적으로 시간이 된다면 [HTTP 완벽가이드] 의 원서를 구해서 읽어봐야할 것이다. 번역서의 경우 번역이 매끄럽지 못한 경우가 종종 있어서, 완벽한 이해를 위해서는 오히려 원서가 좋을 것이다. 하지만 난 영어를 잘 못하니깐... 번역서를 읽을 수밖에 없다. 신입 개발자가 이 글을 보고 있다면 앞으로 꼭 영어 공부를 열심히 하기를 바란다.
헤더는 메시지 본문에 대한 부가적인 정보를 표현한다. [HTTP 완벽가이드] 에서는 일반헤더, 요청헤더, 응답헤더, 엔티티헤더, 확장 헤더로 분류한다. [웹을 지탱하는 기술] 에서는 헤더를 따로 분류하지는 않고, 응답에서만 사용하는지, 요청에서만 사용하는지, 응답요청 둘다 사용하는지 정도만 분류하였다. [그리으로 배우는 HTTP&Network Basie] 에서는 확장헤더는 빼고 일반헤더, 요청헤더, 응답헤더, 엔티티헤더로 분류하였다. 책이 없는 사람은 아래 링크에서 헤더에 대해서 확인할수 있다.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
Date : 메시지를 생성한 시간
Content-Type : 메시지의 바디 내용이 어떠한 종류인가에 대한 타입 지정
Content-Language : 언어 태그
참고로, Content-Type은 미디어 타입 및 문자 인코딩을 지정하는데, 예를 들어서 "Content-Type : application/xml; charset=utf-8" 로 표현할 수 있다. 미디어 타입, 문자 인코딩, 언어 태그 는 서버에서 지정하는 헤더인데 만약 클라이언트가 원하는 값이 있다면 Accept 관련 헤더로 요청할 수 있다. 클라이언트와 서버가 주고 받는 헤더 값을 확인하고 싶다면 아래와 같은 두가지 방법으로 확인이 가능하다.
방법 1 - 크롬 개발자 도구
크롬 브라우저에서 F12 로 개발자도구를 실행할 수 있다. (왠만한 개발자는 다 알고 있으리라 생각되니 간단히 소개만 한다.)
방법 2 - 피들러(Fiddler) 활용하기
피들러 역시 대부분 개발자가 사용하므로 소개만 한다. 참고로 매우 유용한 툴이다.
메시지의 실제 정보를 담고 있다.
쿠키에 대해서 모르는 개발자는 없겠지만, 간단하게라도 설명해보겠다. 지난 글에도 설명했듯이 HTTP 는 스테이트리스(Stateless)한 프로토콜 이다. 즉, 서버가 클라이언트의 애플리케이션 상태를 보존하지 않는다는 것이다. 수많은 클라이언트(사용자)의 정보를 저장하려면 CPU, 메모리에 부담이 될 수 있다. 이 문제를 해결하기 위한 좋은 방법으로 쿠키(Cookie) 를 사용할 수 있다. 쿠키는 세션쿠키와 지속 쿠키 로 나눌 수 있는데, 세션쿠키는 사용자가 브라우저를 닫으면 지워지는 쿠키다. 지속쿠키는 클라이언트의 PC에 저장이 되기 때문에 브라우저를 닫고 나중에 다시 브라우저를 실행하여도 쿠키를 사용할 수 있다. 또한, 쿠키의 만료 시간을 지정할 수 있다. 쿠키에 대해서는 [HTTP 완벽가이드] 의 305page 를 참고하면 된다.
웹프로그래밍 스터디라는 주제의 첫 번째 글로 [1.HTTP 따라잡기] 라는 주제로 글을 써봤다. 웹개발자로 살아가면서 가장 중요하지만, 가장 놓치기 쉬운 주제라서 제일 먼저 작성해봤다. 내용은 많이 부족하니, HTTP 에 대해서 [HTTP 완벽가이드] 를 정독하기를 바란다. 다음 글에서는 [2.웹서버와 WAS 의 차이] 라는 주제로 글을 쓸 예정이다.