데이터를 가져오는(GET)상황과 유사하게 GET은 어떠한 정보를 가져와서 조회하기 위해 사용되는 방식이다.
GET방식은 간단한 데이터를 URL에 넣도록 설계된 방식으로 데이터를 보내는 양에 한계가 있다. HTTP 자체는 GET 방식의 URL 길이의 제약을 두고 있지는 않지만, 브라우저에서 최대 길이를 제한하고 있으며 URL형식에 맞지 않는 파라미터 이름이나 값은 인코딩되어 전달해야한다.
id와 pw를 입력한 후 엔터를 눌렀을 경우 www.asdf.com/login?id=wjdgusdn&pw=1234 와 같은 페이지가 있을 경우 id라는 키(key)에 대해서는 wjdgusdn라는 값(Value), pw라는 키(Key)에 대해서는 1234라는 값(Value)를 전송하고 있다. 여러개의 Key와 Value를 보내는 경우 &를 사용하여 이어주는 GET방식은 최소한의 보안 유지도 하지 않기 때문에 실제 웹사이트에서 민감한 정보의 경우 GET을 사용하면 문제가 생길 수 있다.
POST라는 단어는 제출하다라는 뜻을 가지고 있다. 예를 들어 우리가 어디에 서류를 제출하는 것은 우리에 대한 정보를 제출(POST)하여 추가하기 위해서이다. 이러한 상황과 유사하게 POST방식은 데이터를 서버로 제출하여 추가 또는 수정하기 위해서 사용하는 방식이다.
GET 방식은 URL에 데이터를 붙여서 전송하는 반면에 POST방식은 BODY에 데이터를 넣어서 전송한다. 따라서 헤더필드중 Body의 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고 어떠한 데이터 타입인지 명시해주어야한다. 데이터를 Body에 포함시키는 이점 때문에 메세지 길이의 제한은 없지만 최대 요청을 받는 시간인 Time Out이 존재하므로 클라이언트에서 페이지를 요청하고 기다리는 시간이 존재한다.
| 처리 방식 | GET 방식 | POST 방식 |
|---|---|---|
| URL에 데이터 노출 여부 | O | X |
| URL 예시 | http://localhost:8080/boardList?name=제목&contents=내용 | http://localhost:8080/addBoard |
| 데이터의 위치 | Header(헤더) | Body(바디) |
| 캐싱 가능 여부 | O | X |