GET
- 데이터 조회시에 사용 되는 메소드. 아래와 같은 특성들 때문에 조회시에만 사용하도록 권장된다.
- URI, URL 에 쿼리스트링을 추가하여 데이터를 전송한다. ( 패킷의 헤더에 데이터를 포함하고, 바디는 빈 상태로 요청 )
=> 주소창에 데이터가 노출이 되는 특성 -> 보안에 취약하고 주소 제약으로 인해 아스키 코드만 사용 가능, 길이 제한 등이 있다. - 주소창에 데이터 정보가 있어 브라우저의 history, bookmark, cache 에 저장이 가능하다.
=> 결과가 idempotent( 여러번 시행해도 결과가 일정함 ) 하기 때문에 가능!
=> 브라우저 캐시에 저장이 된 상태라면, 재요청시 재전송이 이루어지지 않음.
=> 따라서 일반적으로 POST 보다 속도가 빠르다. - 조회여도 비밀번호와 같은 민감한 정보를 전송하는 일은 없어야 한다. 주소창과 히스토리에 플레인텍스트로 그대로 남기 때문!
POST
- 주로 새로운 데이터를 생성할 때 사용. PUT, PATCH, DELETE 메소드들이 있지만 POST의 Request Body를 통해 다 실행 가능.
- URI, URL 에 정보 노출 없이, POST의 Request Body 에 필요한 데이터를 작성하여 전송한다.
( 패킷의 헤더에 content-type 을 명시하고, 바디에 내용을 포함하여 요청 )
=> 주소창에 데이터 정보가 없어서 제약없는 크기, 형식을 활용할 수 있고, SSL을 사용하여 보안을 강화할 수 있다. - 기록에 데이터 정보도 남지 않고, 메소드 결과가 idempotent 하지 않기 때문에 캐시될 수 없어서, 재요청시 재전송이 이루어진다.
- 데이터에 제약이 없으므로 대용량 업로드와 같은 파일 전송도 가능하고, 주소에 노출되지 않기 때문에 민감한 정보 전송에 유리하다.
( 여전히 부가적인 보안 장치는 필요하다.)