HTTP 메서드(Method)
GET
리소스(representation) 조회
- 서버에 전달 할 데이터는 query(쿼리 파라미터,스트링)를 통해서 전달한다.
- 메시지 바디를 사용해서 전달할 수 있지만 지원하는 곳이 많지 않아 권장하지 않음
- 주로 검색 필터로 많이 활용한다.
POST
요청데이터 처리 및 등록
- 대상 리소스가 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청한다. 라는 스펙이다.
- 메시지 바디를 통해 요청 데이터를 전달하며, 주로 신규 리소스 등록, 프로세스 처리에 사용한다.
-리소스만으로 설계가 안되는 경우 컨트롤 URI를 사용한다
ex) /orders/{orderId}/start-deliver
- 다른 메서드로 처리하기 애매한 경우에도 POST를 사용한다.
- JSON 조회 데이터를 넘겨야 하는데 GET 메서드를 사용하기 어려운 경우에도 POST 사용
PUT
리소스를 대체(replace), 해당 리소스가 없으면 생성
- 리소스를 완전히 대체하는 개념이다.
- 클라이언트가 리소스의 위치를 알고 URI를 지정한다.
DELETE
리소스 삭제
그 외 메서드
- HEAD :GET과 동일하지만 상태 줄과 헤더만 반환
- OPTIONS : CORS에서 주로 사용
- CONNECT: 대상 리소스로 식별되는 서버에 대한 터널을 설정
- TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행
HTTP 메서드의 속성
HTTP 메서드들은 다음과 같은 속성을 가지고 있다.
여기서 눈여겨 봐야할 것이 안전, 멱등, 캐시 가능 여부이다.
안전(safe)
호출해도 리소스를 변경하지 않는다는 속성이다. 안전은 해당 리소스에만 해당된다.
멱등(Idempotent)
단어를 어디선가 들어본 것도 같고, 되게 낮선 단어같기도 하다.
멱등은 어떤 작업, 함수, 또는 연산을 여러 번 적용하더라도 결과가 바뀌지 않는 성질을 나타낸다.
수학적으로 표시하면 f(f(x)) = f(x)를 만족하는 함수를 나타낸다.
즉, HTTP 메서드 속성에서의 멱등의 의미는 한 번을 호출하든 여러번 호출하든 결과가 똑같음을 의미한다.
위의 그림을 보면 GET,PUT,DELETE는 멱등한 메서드이다.
몇 번을 조회(GET)하든 결과는 같다.
PUT과 POST의 차이는 위에서 PUT은 클라이언트가 URI를 알고 지정한다고 했다.
PUT은 URI를 지정하고 같은 바디를 같은 요청으로 계속 보내기 때문에 결과가 같을 수 밖에 없다.
POST는 요청을 클라이언트에서 지정하지 않고 서버 내부에서 처리하기 때문에 서버 내부에서 처리하는 로직에 따라 결과가 다를 수 있다.
삭제(DELETE) 또한 같은 요청을 계속하더라도 결과는 같다.
만약에 여러번 조회(GET)중에 중간에 다른 곳에서 PUT을 날려서 재요청 도중에 데이터를 바꾼다면 어떻게 될까?
그렇게 된다면 처음 조회와 재요청 조회의 결과가 달라질 것이다.
하지만 멱등은 외부 요인으로 리소스가 바뀐 것까지는 고려하지 않는다.
멱등은 주로 자동 복구 메커니즘이나 서버가 Timeout으로 응답을 못주었을때,
클라이언트가 같은 요청을 다시해도 되는 가?에 대한 판단 근거로 사용된다.
캐시 가능(Cacheable)
응답 결과 리소스를 캐시해서 사용해도 되는 가의 여부를 판단하는 속성이다.
위의 그림을 보면 GET,HEAD,POST,PATCH가 캐시 가능하다.
실제로는 GET,HEAD 정도만 쓰인다.
POST와 PATCH는 본문 내용까지 캐시 키로 고려해야 하는데, 그 부분이 쉽지 않아 잘 쓰이지 않는다.
참조(Reference)
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의
실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연소 기술
www.inflearn.com
'Computer Science > Network' 카테고리의 다른 글
HTTP의 특징 (0) | 2023.09.19 |
---|---|
URI 와 웹 브라우저 요청 흐름 (0) | 2023.09.19 |
HTTP 웹 기본 지식 (2) | 2023.09.18 |
로드 밸런싱(Load Balancing) (0) | 2023.08.29 |
SSL/TLS HandShake (0) | 2023.08.29 |