# 네트워크 전송 GET, POST방식
인터넷 상에서 클라이언트와 서버 간에 요청/응답으로 데이터를 주고 받기 위한 프로토콜이다.
클라이언트(웹 브라우저)
가 서버(웹 서버)
로 특정 웹 페이지
를 요청하면 웹 서버가 해당 페이지의 내용을 HTML
형식으로 응답한다.
이 때, HTTP 요청에 포함되는 HTTP 메소드는 요청의 종류를 서버에게 알려주기 위해 사용한다. HTTP 메소드는 GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE 등이 있다.
GET은 HTTP/1.1 스펙인 RFC2616의 Section9.3에 따르면 서버로부터 정보를 조회하기 위해 설계된 메소드
다.
요청을 전송할 때 필요한 데이터를 Body에 담지 않고
, 쿼리스트링
을 통해 전송한다.
?
와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 말하는데, 요청 파라미터가 여러 개이면 &
로 연결한다.www.example-url.com/resources?name1=val1&name2=val2
데이터가 노출되어 보안에 취약
할 수 있으며, URL의 길이가 정해져 있어
많은 양의 정보를 전달할 수 없다.불필요한 요청을 제한하기 위해 요청이 캐시
될 수 있다.
POST는 GET과 달리 리소스를 생성/변경하기 위해 설계되었기 때문에 전송해야 될 데이터를 HTTP 메세지의 Body에 담아서 전송
한다.
POST 요청도 크롬 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있다.
암호화하여 전송
해야 한다.POST는 URL에 데이터를 노출하지 않으므로 즐겨찾기나 캐싱이 불가능
하다.
HTTP 메세지의 Body는 길이의 제한없이
대용량 데이터를 전송할 수 있다.
요청 헤더의 Content-Type에 요청 데이터의 타입을 표시
해야 한다.
GET
은 Idempotent(멱등)하도록 설계되었는데 이는 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것
을 의미한다.
조회를 할 때 사용
한다.POST
는 Non-idempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.
생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드
라고 할 수 있다.POST
는 요청 데이터가 Body에 담겨 있기 때문에
링크 정보를 가져올 수 없지만,GET
은 URL에 요청 파라미터를 가지고 있기 때문에
링크를 걸 때, URL에 파라미터를 사용해 더 자세하게 페이지를 링크할 수 있다.� 이처럼 GET과 POST는 차이가 있기 때문에 설계원칙에 따라 적절한 용도로 사용할 것!