Network & AWS
[HTTP Method]
Haksae
2021. 12. 22. 16:21
1. HTTP 요청 메서드
HTTP는 요청 메서드를 정의하여, 주어진 리소스에 수행하길 원하는 행동을 나타냅니다. 간혹 요청 메서드를 "HTTP 동사"라고 부르기도 합니다. 각각의 메서드는 서로 다른 의미를 구현하지만, 일부 기능은 메서드 집합 간에 서로 공유하기도 합니다.
- GET : 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 합니다.
- HEAD : 메서드는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함하지 않습니다.
- POST : 메서드는 특정 리소스에 엔티티를 제출할 때 쓰입니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.
- PUT : 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 바꿉니다
- DELETE : 메서드는 특정 리소스를 삭제합니다.
- CONNECT : 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺습니다.
- OPTIONS : 메서드는 목적 리소스의 통신을 설정하는 데 쓰입니다.
- TRACE : 메서드는 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 합니다.
- PATCH : 메서드는 리소스의 부분만을 수정하는 데 쓰입니다.
2. GET vs POST
💡 GET vs POST → 많은 개발자들이 GET과 POST를 용도 구분없이 사용한다. 그래서 좀 더 자세히 정리해본다.
GET : 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메서드
- 데이터를 Read(읽거나), Retrieve(검색)할 때 사용되는 method이다.
- GET은 요청을 전송할 때, URL 주소 끝에 파라미터로 포함되어 전송, 이 부분을 QueryString이라고 부른다.
e.g.) www.example-url.com/resources?name1=학새&name2=곽철용 위 예는 앞서 말한 쿼리스트링을 포함한 URL입니다. 파라미터인 name1과 name2를 통해 값을 전달받을 수 있습니다. 만약, 요청 파라미터가 여러 개이면 &로 연결합니다.
- GET의 특징
- GET 요청은 캐시가 가능하다.
- : GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
- GET 요청은 브라우저 히스토리에 남는다.
- GET 요청은 북마크 될 수 있다.
- GET 요청은 길이 제한이 있다.
- : GET 요청의 길이 제한은 표준이 따로 있는건 아니고 브라우저마다 제한이 다르다고 한다.
- GET 요청은 중요한 정보를 다루면 안된다. ( 보안 )
- : GET 요청은 파라미터에 다 노출되어 버리기 때문에 최소한의 보안 의식이라 생각하자.
- GET은 데이터를 요청할때만 사용 된다.
POST : 리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는 데 사용되는 메서드
- GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송합니다. 그리고 Body의 타입은 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시 따라 결정 된다.(POST로 요청을 보낼 때는 해야 합니다.)
- HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있습니다. 그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있는 이유도 이 때문입니다.
- 이처럼 POST는 데이터가 Body로 전송되고, 내용이 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만, POST 요청도 크롬의 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 합니다.
- POST의 특징
- POST 요청은 캐시되지 않는다.
- POST 요청은 브라우저 히스토리에 남지 않는다.
- POST 요청은 북마크 되지 않는다.
- POST 요청은 데이터 길이에 제한이 없다.
GET과 POST의 차이점
1. 사용 목적
- GET은 가져온다는 개념
- POST는 수행한다는 개념
→ 즉, Get은 서버의 리소스에서 데이터를 요청할 때, Post는 서버상의 데이터 값이나 상태를 바꾸기 위해서 요청할 때 사용한다.
2. Idempotent
- GET은 Idempotent, POST는 Non-idempotent
👉🏻 GET 요청은 데이터 변형의 위험이 없이 사용할 수 있다는 장점이 있다.
3. 요청에 body 유무
- GET은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 Body가 없다.
- 반면 POST는 body에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재
GET POST
캐시 | ⭕️ |
브라우저 기록 | ⭕️ |
북마크 추가 | ⭕️ |
데이터 길이 제한 | ⭕️ |
HTTP 응답 코드 | 200(Ok) |
언제 주로 사용하는가? | 리소스 요청 |
리소스 전달 방식 | 쿼리스트링 |
idempotent | ⭕️ |