HTTP 통신 함수, GET과 POST 방식에 대해 알아 보도록 하겠습니다.
서버로부터 정보를 조회하기 위한 메소드
요청할 때 필요한 데이터를 Body에 담지 않고 쿼리스트링을 통해 전송합니다.
예를들어, www.example.com/resources?userId=value1&password=value2와 같은 URL형태로 전송할 수 있습니다.
또한 GET은 요청이 캐시될 수 있어 불필요한 요청을 제한할 수 있습니다.
정적 콘텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해두고,
동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용합니다.
서버로의 정보 전송 및 서버 작업 수행
반면, POST는 리소스를 생성/변경하기 위해 설계되었기 때문에
GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송합니다.
HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있어 대용량 데이터를 전송할 수 있습니다.
또한 POST로 요청을 보낼 때는 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 합니다.
데이터 타입을 표시하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추하고,
알 수 없는 경우에는 application/octet-stream으로 처리합니다.
GET(Select) | POST(Update) | |
---|---|---|
동일한 요청 | 동일한 응답(멱등성) | 응답이 동일하지 않음 |
주 사용 | 조회 | 생성, 수정, 삭제 |
데이터 | Header에 포함 | Body에 포함 |
URL | 데이터를 포함 (최대 2048자) | 데이터 노출 안됨 |
보안 | URL에 데이터가 노출 | SSL을 사용할 때 노출되지 않음 |
전송속도 | 캐시가 남아있어 전송 빠름 | 캐시가 남지 않아 전송 느림 |
히스토리 | 브라우저 히스토리에 파라미터가 남음 | 히스토리에 파라미터가 저장되지 않음 |
Char | ASCII 캐릭터만 허용 | Binary Data 허용 |
GET은 데이터 요청/조회를 할 때, POST는 데이터 생성/변경을 할 때 사용합니다.
GET은 Idempotent하고, POST는 Non-idempotent합니다. 이에 따라 적절한 메소드를 선택하여 사용해야 합니다.