게시판을 만들던 도중 GET과 POST 방식에 대한 개념이 부족한 것 같아, 이 글을 포스팅하게 되었습니다.
HTTP 프로토콜은 클라이언트와 서버 간의 통신을 위한 규약을 정의합니다. 이 프로토콜을 사용하여 웹 브라우저(클라이언트)와 웹 서버 간에 데이터를 주고받습니다. 이때, 주요한 두 가지 메서드(method)인 GET과 POST가 있습니다.
글에 들어가기에 앞서 정리하자면, GET은 가져온다는 개념이고, POST는 수행한다는 개념으로 받아들이면 쉽습니다.
즉, GET은 서버에서 어떤 데이터를 가져와서 보여줄 때 사용합니다. 어떤 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용을 하는 것입니다. 이에 비해, POST는 서버상의 데이터 값이나 상태를 바꾸기 위해서 사용합니다.
지난 포스트에서 게시했던 게시판으로 예를 들자면, 글의 내용에 대한 목록을 보여주는 경우나, 글의 내용을 보는 경우는 GET에 해당합니다. 그리고 글의 내용을 저장하고, 수정할 때에 POST를 사용하는 것이라 할 수 있습니다.
GET/POST 특징과 역할
GET
- GET method는 클라이언트에서 서버로 어떠한 리소스의 정보를 요청하기 위해 사용되는 메서드입니다.
- 데이터를 읽거나(Read), 검색(Retrieve)할 때에 사용되는 method
- GET은 요청을 전송할 때 URL 주소 끝에 파라미터를 포함하여 전송합니다.
ex)
www.example-url.com/resources?dataid1=123&dataid2=456
위 예는 앞서 말한 쿼리스트링을 포함한 URL입니다. 파라미터인 dataid1과 dataid2를 통해 값을 전달받을 수 있습니다.
만약, 요청 파라미터가 여러 개이면 &로 연결합니다.
또한, GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않기에, 데이터의 변형의 위험이 있어 사용할 수 있습니다.
POST
- POST method는 리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는 데 사용됩니다.
- GET과 달리 전송해야 될 데이터를 HTTP 메시지의 Body에 담아서 전송합니다. 그리고 그 Body의 타입은 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시 따라 결정됩니다. (POST로 요청을 보낼 때는 반드시 해야 합니다.)
- HTTP 메시지의 Body는 길이의 제한 없이 데이터를 전송할 수 있습니다. 그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있습니다.
이처럼 POST는 데이터가 Body로 전송되고, 내용이 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만, POST 요청도 크롬의 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 합니다.
GET과 POST의 차이점 정리
- GET은 주로 정보를 요청할 때 사용하고, URL에 데이터가 노출됩니다.
- POST는 데이터를 서버로 제출할 때 사용하고, 데이터는 HTTP 요청의 본문에 포함되어 URL에 노출되지 않습니다.
- GET은 보안적으로 민감한 정보를 전송하기에는 적합하지 않지만, POST는 보다 안전하게 데이터를 전송할 수 있습니다.
- GET은 캐싱 기능을 이용하여 이전에 요청한 리소스를 재사용할 수 있지만, POST는 캐싱 기능을 이용하여 재사용할 수 없습니다.
- GET은 데이터 길이 제한이 있어서 대용량 데이터를 전송하기에는 적합하지 않지만, POST는 데이터 길이 제한이 없어서 대용량 데이터를 전송할 수 있습니다.
참고 블로그
https://whales.tistory.com/120