GET 메서드는 서버에서 데이터를 조회할 때 사용하는 메서드이고, POST 메서드는 서버에 데이터를 추가할 때 사용하는 메서드이다. GET 요청에는 url에 query 파라미터나 path 파라미터를 이용하여 필요한 정보를 전달하고, POST 요청에서는 추가하고자 하는 데이터를 HTTP body에 담아 전달한다.
GET
요청하는 데이터가 HTTP Request Message의 Header 부분에 url 에 담겨서 전송되는데, URL 뒤에 쿼리 스트링(query string)의 형태로 데이터를 전송할 수 있다. (e.g. url?filter=cafe&order=latest) 쿼리 스트링은 ?로 시작하며 key=value 형태로 여러 개의 파라미터를 전달할 수 있다. 이 방식의 장점은 간단하고 빠르게 데이터를 전달할 수 있다는 것이다. 하지만 URL 상에 데이터가 노출되기 때문에 보안에 취약하다(ex. password). 또한, 전송 데이터의 길이에 제한이 있다.
POST
HTTP Request Message의 Body 부분에 데이터가 담겨서 전송된다. 이 방식은 GET 방식처럼 URL 상에 데이터가 노출되지 않기 때문에 보안적으로 더 안전하며, 전송 데이터의 길이에도 제한이 없지만 GET 방식보다 느리고 복잡하다는 단점이 있다.
둘의 차이
우선 GET 은 가져오는 것이다. 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태 등을 변경하지 않는다. 반면에 POST 는 서버의 값이나 상태를 변경하기 위해서 또는 추가하기 위해서 사용된다. 부수적인 차이점을 좀 더 살펴보자면 GET 방식의 요청은 브라우저에서 Caching 할 수 있다. 브라우저에서 get 함수를 호출했을 때 동일한 url이면 브라우저 자체에서 캐시 처리가 되어 실제 서버를 호출하지 않는다. 즉 새로운 요청을 서버로부터 받아와야 하는데 크롬 브라우저 자체의 캐시로 요청이 처리된다. 때문에 POST 방식으로 요청해야 할 것을 보내는 데이터의 크기가 작고 보안적인 문제가 없다는 이유로 GET 방식으로 요청한다면, 기존에 caching 되었던 데이터가 응답될 가능성이 존재한다(업데이트된 데이터 가져오지 않음). 때문에 목적에 맞는 기술을 사용해야 하는 것이다.
따라서, 검색이나 조회하는 경우에는 GET을 사용하고, 보안이 중요한 데이터를 전송할 때는 POST를 사용하는 것이 적합하다.
'CS > 면접을 위한 CS 전공노트' 카테고리의 다른 글
[네트워크] Blocking/Non-blocking & Synchronous/Asynchronous (1) | 2023.04.20 |
---|---|
[네트워크] DNS Round Robin 방식의 문제점 (0) | 2023.04.20 |
[네트워크] 브라우저에 URL을 입력하고 일어나는 일 (0) | 2023.04.20 |
[네트워크] HTTP/HTTPS (0) | 2023.04.19 |
[네트워크] 네트워크 기기/IP 주소 (0) | 2023.04.18 |