클라이언트가 서버로 요청을 보내는 방법인 HTTP Method에는 크게 두 가지 방법이 있는데 GET 방식과 POST 방식이 있다.
GET은 클라이언트에서 서버로 어떠한 정보를 요청하기 위해 사용되는 메소드이다.(ex. 게시판의 게시물을 조회)
요청하는 데이터가 HTTP Request Message의 헤더 부분에 url이 담겨서 전송된다. (GET은 body가 대부분 없다.)
방식은 URL 끝에 ? 를 붙이고 변수명=값& 형식이다.
/test/demo_form.php?name1=value1&name2=value2
서버에서는 name1 과 name2 라는 파라미터 명으로 value1 과 value2의 파라미터 값을 전달 받을 수 있다.
GET 방식은 url 이라는 공간에 담겨가기 때문에 전송할 수 있는 데이터의 크기가 제한적이다. 그리고 url에 데이터가 그대로 노출이 되므로 보안적인 측면에서는 매우 좋지않다.
POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메소드이다.(ex. 게시판에 게시글을 작성)
POST는 전송할 데이터가 HTTP Request Message의 바디 부분에 데이터가 담겨서 전송된다. (name1=value1&name2=value2 이 부분이 바디에 담겨 보내진다고 생각한다.)
POST로 데이터를 전송하면 길이 제한이 따로 없어서 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 URL 상으로 바로 드러나지 않기 때문에 보안 측면에서는 더 좋다.
하지만 데이터를 암호화하지 않으면 바디의 데이터도 결국 볼 수 있다.
목적 : GET은 서버에 데이터를 요청할 때, POST는 서버의 리소스를 생성하거나 업데이트할 때 사용한다.
캐싱 : GET방식은 브라우저에서 캐싱할 수 있다. 이를 이용해서 개인정보가 포함되지 않는 상황에서 캐싱을 하여 속도를 높이거나 즐겨찾기를 편리하게 하기 위해 사용될 수 있다.
바디의 유무 : GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 바디가 없다. POST 는 바디에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 바디가 존재한다.