GET이란
- GET은 클라이언트에서 서버로 정보를 요청하기 위해 사용되는 메서드입니다.
- GET은 요청을 전송 할 때 필요한 데이터를 Body에 담지 않고, 쿼리 스트링을 통해 전송합니다.
- URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 쿼리스트링이라 부릅니다
만약 요청 파라미터가 여러개라면 &로 연결하여 사용합니다.
www.example-url.com/resources?name1=value1&name2=value2
쿼리스트링을 포함한 URL 샘플이며 , 요청 파라미터는 name1 , name2 이며 각각의 파라미터는 value1 , value2라는 값으로 서버에 요청을 보내게 됩니다.
GET의 특징
POST이란
- POST는 클라이언트에서 서버로 리소스를 생성/변경하기 위해 데이터를 보낼 때 사용되는 메서드
- POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보냅니다.
- HTTP 메세지의 Body 부분은 길이의 제한 없이 데이터를 전송 할 수 있습니다.
- body의 타입은 Content-Type 헤더에 따라 결정되며 GET에서 URL의 파라미터로 보냈던 name1=value1&name2=value2 가 body에 담겨 보내진다 생각하면 됩니다.
- POST로 요청을 보낼 때 GET과는 다르게 URL을 확인 할 수는 없지만 POST 요청도 크롬 개발자도구 나 Fiddler와 같은 툴로 요청 내용을 확인 할 수 있어 민감한 데이터의 경우 반드시 암호화를 하여 전송해야 합니다.
- POST로 요청을 보낼 때는 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 합니다.
- Content-Type의 종류로는
"application/x-www-form-urlencoded, text/plain, multipart/form-data" 등이 있다
POST의 특징
- POST 요청은 캐시되지 않습니다.
- POST 요청은 브라우저 히스토리에 남지 않습니다.
- POST 요청은 데이터 길이에 제한이 없습니다.
GET과 POST의 차이점
- 사용 목적 : GET은 서버의 리소스를 요청할 때 , POST는 그 리소스를 생성/수정 할 때 사용됩니다.
- 요청에 body 유무 : GET은 URL 파라미에터 요청하는 데이터를 담아 보내기에 HTTP 메시지에 body 부분이 없고 POST는 body에 데이터를 담아 보내기에 HTTP 메시지에 body가 존재합니다.
- 멱등성 : GET 요청은 멱등이고 , POST는 멱등이 아닙니다.
| GET | POST |
|---|
캐시화(cached) | 캐시 될 수 있음. | 캐시되지 않음 |
브라우저 히스토리 | 히스토리에 쿼리 문자열이 기록됨 | 히스토리에 기록되지 않음 |
데이터 길이 | 데이터의 길이가 URL 주소의 길이 이내로 제한됨 | 제한 없음 |
데이터 타입 | 오직 ASCII 문자 타입의 데이터만 전송 가능 | 제한 없음 |
보안성 | 데이터가 URL 주소에 포함 되어 전송 되어 아무나 볼 수 있어 보안에 매우 취약합니다 | 브라우저 히스토리에도 기록 되지 않고 데이터가 따로 전송되므로 GET 방식보다 보안성이 높으나 개발자 Tool로 확인이 가능하기에 민감한 데이터는 암호화를 해야합니다. |
멱등이란 ?
- 멱등은 사전적 정의는 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질을 의미합니다.
- GET은 리소스 조회이기에 여러번 요청을 하더라도 결과가 달라지지 않을것입니다.
- POST는 리소스 생성/수정이기에 멱등이 아니라고 볼 수 있습니다
출처: https://noahlogs.tistory.com/35 [인생의 로그캣:티스토리]
출처: https://wldudsladlfkd.tistory.com/23 [young의 개발이야기]
출처: https://brilliantdevelop.tistory.com/33 [기발개발]