HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
👻
개발 기록
/
📚
CS 스터디
/
📚
HTTP method
📚

HTTP method

클라이언트와 서버의 request, response 과정 속 HTTP/1.1에서 사용할 수 있는 메서드에 대해 알아보자. 어떤 종류가 있고, 각 종류는 어떤 특징을 갖고 있을까?
 

✉️ HTTP 메시지 구조

  • Header + Body로 나뉘어 진다.
  • Header에는 주소 정보, 메서드 방식, 클라이언트 정보, 브라우저 정보, 접속 URL 등의 정보를 담는다.
  • Body에는 보통 비어 있다가 필요시 데이터 정보가 포함된다.
 

📨 메서드를 사용해 지시를 내리다

  • request를 보내는 경우 메서드라고 불리는 명령이 있다.
  • 메서드는 리소스에 어떠한 행동을 하기 원하는지를 지시하기 위해 존재한다.
  • 메서드에는 GET, POST, PUT, DELETE 등이 있다.
  • 메서드는 대문자와 소문자를 구별하기 때문에 대문자로 기재해야 한다.
💡
지금부터 HTTP/1.0과 HTTP/1.1에서 제공하고 있는 메서드를 알아보자!
 

GET (조회)

  • 리소스 획득.
  • GET 메서드는 리퀘스트 URI로 식별된 리소스를 가져올 수 있도록 요구한다.
  • 파라미터가 URI에 포함되기 때문에 HTTP 헤더에 포함되어 서버에 요청된다.
    • 때문에 HTTP의 body는 비어있다.
  • 서버는 리소스를 해석해 결과를 내보낸다.
  • 멱등성(결과가 달라지지 않는 성질)을 가진다.
    • 자원의 상태를 변화시키지 않아 안정적이다.
    • HTTP 메서드는 서버의 상태를 바꾸지 않으면 그 메서드가 안전하다고 말한다.
    • 캐싱이 되는 특징을 갖고 있어 POST보다 속도가 빠르다.
  • 아이디나 패스워드가 URL에 포함되면 보안에 취약하므로 유의해야 한다.
> GET 메서드를 사용한 request. response 예.
> request는 option 조건 - URL 뒤에 물음표를 붙여 URL의 끝을 알리고, key-value의 쌍으로 인수 앞에 &를 붙여 구분하며, 글자수는 255자로 제한된다.
> GET 메서드를 사용한 request. response 예. > request는 option 조건 - URL 뒤에 물음표를 붙여 URL의 끝을 알리고, key-value의 쌍으로 인수 앞에 &를 붙여 구분하며, 글자수는 255자로 제한된다.
💡
URI vs URL URI는 리소스를 식별하기 위해 문자열 전반을 나타내는데 비해 URL은 리소스의 장소(네트워크 상의 위치)를 나타냅니다. URL은 URI의 서브셋임.
 

POST (생성)

  • 데이터 전송.
  • 요청 유형은 Content-Type 헤더로 나타낸다.
  • URL에 요청 데이터를 기록하지 않고, 데이터를 HTTP 바디에 넣어 전송한다.
  • 데이터 전송에 대한 제한이 없으므로, 많은 양의 데이터를 전송할 수 있다.
POST 메서드를 사용한 request. response 예.
POST 메서드를 사용한 request. response 예.
⚠️
POST 방식이 GET 방식보다 안전할까? POST든 GET이든 보내는 데이터는 전부 클라이언트 측에서 볼 수 있다. 단지 GET 방식은 URL에 데이터가 표시되어 더 쉽게 볼 수 있어서지, 두 방식 모두 보안을 생각한다면 암호화를 해야 한다.
 

PUT (변경)

  • 새로운 리소스를 생성하거나 데이터를 대체한다.
  • PUT 자체에 인증 기능이 없어 누구든지 파일을 업로드 가능하다는 보안 상의 문제도 있어서 일반적인 웹 사이트에서는 사용되지 않고 있다.
성공적으로 수정했다면, 출처 서버는 반드시 200 (OK) 또는 204 (No Content) 응답을 보내 성공을 알려줘야 합니다.
성공적으로 수정했다면, 출처 서버는 반드시 200 (OK) 또는 204 (No Content) 응답을 보내 성공을 알려줘야 합니다.
💡
PUT vs POST PUT과 POST의 차이는 멱등성으로, PUT은 멱등성을 가집니다. PUT은 한 번을 보내도, 여러 번을 연속으로 보내도 같은 효과를 보입니다. 즉, 부수 효과가 없습니다.
 

DELETE (삭제)

  • 지정한 리소스를 삭제한다.
  • PUT 메서드와 같이 인증 기능이 없어 일반적인 웹 사이트에서는 사용되지 않고 있다.
200, 204, 202와 같은 상태 코드를 응답한다.
200, 204, 202와 같은 상태 코드를 응답한다.
 

HEAD

  • HEAD 메서드는 GET과 같은 기능이지만 메시지 바디는 돌려주지 않는다.
  • URI 유효성과 리소스 갱신 시간을 확인하는 목적 등으로 사용된다.

OPTIONS

  • 제공하고 있는 메소드를 문의한다.
  • 예를 들어, OPTIONS 메서드를 request하면 response로 허락된 GET, POST 등 서버가 제공하고 있는 메서드를 돌려준다.

TRACE

  • 경로를 추적한다.
  • 크로스 사이트 트레이싱(XST)과 같은 공격을 일으키는 보안 상의 문제가 있어 보통은 사용되지 않는다.

CONNECT

  • 프록시에 터널 접속 확립을 요함으로써, TCP 통신을 터널링 시키기 위해서 사용된다.
  • 주로 SSL이랑 TLS 등의 프로토콜로 암호화된 것을 터널링 시키기 위해서 사용되고 있다.
 

🛡️ 멱등성

  • 동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말한다.
  • 올바르게 구현한 경우 GET, HEAD, PUT, DELETE 메서드는 멱등성을 가지며, POST 메서드는 그렇지 않다.
  • 모든 안전한 메서드는 멱등성 또한 갖지만, 모든 멱등성을 지닌 메서드가 안전한 것은 아니다. 예컨대 PUT과 DELETE는 둘 다 멱등성을 가졌지만 안전하지는 않은 메서드다.

DELETE 메서드가 멱등성을?

첫 번째 DELETE 요청이 200을 반환한다면, 그 이후는 아마 404를 반환할 것이다.
첫 번째 DELETE 요청이 200을 반환한다면, 그 이후는 아마 404를 반환할 것이다.
  • DELETE /idX/delete HTTP/1.1의 상태 코드는 응답마다 달라질 수 있지만, 그럼에도 멱등성을 가진다.
  • REST API에서 개발자는 DELETE 메서드를 사용해 "목록의 마지막 항목 제거" 기능을 구현해서는 안된다.

멱등성 관련 기술 지식 정리

  • 멱등성 메서드 문서: GET, HEAD, PUT, DELETE, OPTIONS, TRACE
  • 비 멱등성 메서드 문서: POST, PATCH, CONNECT
 
참고자료 :
<그림으로 배우는 Http&Network Basic> ch.2
웹의 기본 동작 개념 3 - HTTP와 GET, POST 방식
MDN PUT, MDN GET, MDN POST, MDN DELETE, MDN 멱등성