GET/POST가 뭐지?
GET/POST는 HTTP의 method
HTTP는 또 뭐지?
- 웹상에서 클라이언트-서버 간 요청/응답을 할 때 정해놓은 프로토콜(일종의 약속)
- 클라이언트는 HTTP 프로토콜로 서버에 요청, 서버는 요청에 맞는 응답을 클라이언트에게 보낸다.
- 이때 HTTP 메소드는(GET/POST...) 서버가 클라이언트의 요청 처리시 어떤 행동을 해야하는지 표시하는 용도로 사용
GET
정보를 가져오는 기능으로 사용,
GET은 서버의 값이나 상태등을 바꾸지 않는다(글 목록이나 게시판 리스트같은 정보 조회에 사용)
서버에 요청할 데이터를 쿼리스트링에 담아서 전달
www.velog.com/resource?name1=value1&name2=value2
에서 ?
로 시작하는 부분이 쿼리스트링
- 쿼리스트링은
?
로 시작하고, 요청 파라미터가 여러개일때 &
로 연결지어준다(?name1=value& name2=value2)
처럼
- 불필요한 요청 제한을 위해 요청이 캐시될 수 있다.
js나 css같은 정적콘텐츠는 바뀔 일이 자주 있지 않고,
파일이 크기에 동일한 요청을 계속 보낼 필요가 없다.
따라서 정적콘텐츠를 브라우저에 요청시,
브라우저는 요청을 캐시해두고 동일한 요청 발생시
서버로 요청 보내는 대신 캐시된 데이터를 사용
POST
POST는 리소스를 생성/변경하기 위해 설계됨
GET과 달리 전송해야될 데이터를 HTTP 패킷의 Body에 담아서 전송
- HTTP 메세지의 Body는 길이 제한이 없기에 POST 요청은 GET과 달리 한 번에 전달하는 데이터 양에 제한X
- POST 요청도 크롬 개발자 도구 등을 통해 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야
- POST로 요청을 보낼 때는 Request 헤더의 Content-Type에 전송하고자 데이터의 타입을 표시해야하고,
데이터 타입을 표시하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추하고 만약, 알 수 없는 경우에는 application/octet-stream로 요청을 처리
- 서버에서 DB에 정보 추가/수정시 사용(새로운 글 등록/내용 수정)
GET/POST의 차이
GET=> 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다.즉,설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 하기에 주로 데이터 조회시에 사용(게시글 읽어오기 등)
POST=> 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.글을 쓰면 서버에 저장이 되고, 글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청시 서버의 무언가는 변경되기에 POST는 서버의 상태나 데이터를 변경시킬 때 사용
- 링크를 통해 특정 페이지로 바로 이동하려면 해당 링크와 관련된 정보가 필요한데 POST는 요청 데이터가 Body에 담겨 있기 때문에 링크 정보를 가져올 수 없다. 반면, GET은 URL의 쿼리스트링에 요청 파라미터를 가지고 있기에 쿼리스트링의 파라미터를 사용해 더 디테일하게 페이지를 링크할 수 있다.
출처:https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/