CS공부/네트워크
[네트워크/웹] HTTP GET과 POST
이숭간
2021. 7. 17. 10:55
728x90
둘다 HTTP프로토콜상에서 무언가를 요청할때 사용하는 방식이다. 하지만 둘의 특성과 생겨난 배경은 엄연히 다르므로 제대로 이해하고 기술목적에 맞게 적재적소에 사용해야 한다.
GET
- 언제 사용하는가?
- 단순히 서버의 데이터를 조회하는 경우
- 서버의 값이나 상태를 변경하지 않는다.
- SELECT적 특성
- 요청 데이터를 어떻게 보내는가?
- uri에 포함해서 보낸다. (?을 통한 PathVariable)
- 노출이 쉬워 보안이 필요한 데이터의 요청에선 사용하지 않는게 좋다.
- 멱등
- 서버에게 여러번 요청을 하더라도 동일한 응답이 돌아와야 한다는 개념 (안전하다)
- Ex) 여러번 요청해도 안전하다! 요청이 제대로 수행되지 않았다 하더라도 멱등한 요청은 여러번 그냥 보내서 해결할수있음, 계좌송금(post)과같은경우 안전하지 않으므로 여러번 요청하면 안된다.
POST
- 언제 사용하는가?
- 서버의 값이나 상태를 변경하기 위해
- 서버의 새로운 자원을 추가하기 위해
- INSERT, UPDATE, DELETE
- 요청데이터를 어떻게 보내는가?
- HTTP 요청메세지의 Body부분에 포함해서 전송
- Request Header의 Content-Type에 Body의 타입을 나타내는 값이 들어간다.
- Default: application/octet-stream
- 단순 txt의 경우: text/plain
- 파일의 경우: multipart/form-date
추가적인 차이점
- POST의 가장큰 특징은 요청측에서 리소스의 경로를 모른다는것이다. POST 요청에 의해서 새로운 리소스가 생기고 이로인해 자원의주소가 생기기 때문이다. 반면 GET방식은 요청시점에 리소스의 주소를 알고있다.
- GET 요청은 브라우저에서 캐싱할 수 있다. 때문에 POST로 보내야할것인데 간단고 보안도 필요없으니까~ 하면서 GET으로 보내면 기존에 캐싱된 데이터가 응답될 가능성이 존재함
- GET방식의 경우 HTTP 패킷의 Body는 비어 있는 상태로 전송한다. 즉, Body의 데이터 타입을 표현하는 'Content-Type' 필드도 HTTP Request Header에 들어가지 않는다.
출처: https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network#http의-get과-post-비교