-
GET method는 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메서드이다.
데이터를 읽거나(Read), 검색(Retrieve)할 때에 사용되는 method라고 할 수 있다.
예를들면 게시판의 게시물을 조회할 때 쓸 수 있다.
GET은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(QueryString) 이라고 부른다.http://www.example-url.com/resources?name1=정정일&name2=홍길동
쿼리스트링을 포함한 URL입니다. 파라미터인 name1과 name2를 통해 값을 전달받을 수 있다.
만약, 요청 파라미터가 여러 개이면&
로 연결한다.GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다.
따라서 이런 이유로 사용하면 안전하다고 간주된다. 즉, 데이터의 변형의 위험없이 사용할 수 있다는 뜻이다.-
GET 요청은 캐시가 가능하다. GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
-
GET 요청은 브라우저 히스토리에 남는다.
-
GET 요청은 북마크 될 수 있다.
-
GET 요청은 길이 제한이 있다. GET 요청의 길이 제한은 표준이 따로 있는건 아니고 브라우저마다 제한이 다르다고 한다.
-
GET 요청은 중요한 정보를 다루면 안된다. GET 요청은 파라미터에 다 노출되어 버리기 때문에 최소한의 보안 의식이라 생각하자.
-
GET은 데이터를 요청할때만 사용 된다.
-
-
POST method는 리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는 데 사용된다.
예를들면 게시판에 게시글을 작성하는 작업 등을 할 때 사용할 된다.GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송한다.
그리고 그 Body의 타입은 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시 따라 결정 된다.HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있다.
그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있는 이유도 이 때문이다.POST는 데이터가 Body로 전송되고, 내용이 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만,
POST 요청도 크롬의 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 한다.-
POST 요청은 캐시되지 않는다.
-
POST 요청은 브라우저 히스토리에 남지 않는다.
-
POST 요청은 북마크 되지 않는다.
-
POST 요청은 데이터 길이에 제한이 없다.
-
-
GET과 POST의 특징만 보아도 차이가 나긴하지만 추가적으로 차이점을 정리해보면 다음과 같다.
-
GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 된다. -
GET은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다.
POST는 body에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다. -
GET 요청은 멱등이며, POST는 멱등이 아니다.
-
멱등의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다. GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같을 것 이다. 반대로 POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있다.
-
-
GET POST 캐시 O X 브라우저 기록 O X 북마크 추가 O X 데이터 길이 제한 O X HTTP 응답 코드 200(Ok) 201(Created) 언제 주로 사용하는가? 리소스 요청 리소스 생성 리소스 전달 방식 쿼리스트링 HTTP Body idempotent O X
-