HTTP 메서드 중, GET과 POST를 제대로 구분하는 것이 포인트이다.
우선 GET 방식은 요청하는 데이터가 HTTP Request Message의 Header 부분에 url 이 담겨서 전송된다. 때문에 url 상에 ? 뒤에 데이터가 붙어 request 를 보내게 되는 것이다. 이러한 방식은 url 이라는 공간에 담겨가기 때문에 전송할 수 있는 데이터의 크기가 제한적이다. 또 보안이 필요한 데이터에 대해서는 데이터가 그대로 url 에 노출되므로 GET방식은 적절하지 않다. (ex. password)
HTTP 메세지에는 두 종류가 있다. Request Message와 Reponse Message이다. 브라우저에 URL을 입력하면 HTTP 표준에 따라 URL을 요청 메시지로 변환하고 TCP/IP를 사용하여 인터넷을 통해 요청을 보낸다. 웹 서버는 요청을 수신하고 클라이언트가 요청한 웹 페이지를 반환한다.
요청 메시지는 크게 요청 라인(Request Line), 요청 헤더(Request Headers), 공백 라인(A blank line), 요청 바디(Requset Message Body)로 나뉜다.
요청 메세지: 라 / 헤 / (공) / 바
① 요청 라인: HTTP Method, Web page, HTTP version
② 요청 헤더: Host, Accept, User-Agent, Cokie, Referer
Host: 클라이언트가 요청한 도메인 정보
Accept: 웹 서버로부터 수신되는 데이터 중 웹 브라우저가 처리할 수 있는 데이터의 형식 정의
User-Agent: 사용자 웹 브라우저 종류 및 버전 정보
Cookie: 클라이언트 로컬에 저장되는 key-value쌍의 데이터 파일
Referer: 경유한 웹 사이트에 대한 정보
③ 공백 라인: 요청 헤더와 요청 바디를 구분하는 라인
④ 요청 바디: 클라이언트가 서버에 실제 요청한 내용
응답 메시지는 크게 상태 라인(Status Line), 응답 헤더(Response Headers), 공백 라인(A blank line), 응답 바디(Requset Message Body)로 나뉜다.
응답 메세지: 라 / 헤 / 바
① 상태 라인: HTTP Version, Status Code
② 응답 헤더: Date, Server, Content-Type, Last-Modified
③ 응답 바디: 실제 응답받은 메시지(데이터)
POST 방식의 request 는 HTTP Request Message의 Body 부분에 데이터가 담겨서 전송된다. 때문에 바이너리 데이터를 요청하는 경우 POST 방식으로 보내야 하는 것처럼 데이터 크기가 GET 방식보다 크고 보안면에서 낫다.(하지만 보안적인 측면에서는 암호화를 하지 않는 이상 고만고만하다.)
자세한 내용은 필자가 이전에 포스트 했던 웹 HTTP 지식 (1편) 게시물 4.4 번부터 확인하면 된다.