본문 바로가기
💻 하나씩 차곡차곡/Back-end

[HTTP] HTTP 정의/특징/메시지/메서드(GET,POST,PUT 등)

by 뚜루리 2024. 8. 8.
728x90
320x100


 

HTTP (HyperText Transfer Protocol)

  • HTTP는 요청(request)과 응답(response)의 형태로 작동하는 프로토콜이다.
  • 클라이언트(주로 웹 브라우저)가 서버에 요청을 보내고, 서버는 그 요청에 대해 응답을 반환하는 방식으로 동작한다.
  • HTTP는 기본적으로 TCP 포트 80번을 사용하며, HTTPS(HTTP Secure)는 포트 443번을 사용한다.

 

HTTP (HyperText Transfer Protocol) 특징

비연결성(Connectionless)

  • HTTP는 기본적으로 비연결성 프로토콜이다. 이는 클라이언트가 서버에 요청을 보내고 서버가 응답을 반환하면, 그 연결이 즉시 종료된다는 의미로 각 요청은 독립적으로 처리된다.
  • 단, HTTP/1.1부터는 연결을 재사용할 수 있는 Keep-Alive 기능이 도입되어, 다수의 요청/응답이 동일한 연결을 통해 이루어질 수 있다.
  • 일반 적으로 초 단위 이하의 빠른 속도로 응답하며 서버 자원을 매우 효율적으로 사용할 수 있는 특징이 있다.

무상태성(Stateless)

  • HTTP는 무상태성 프로토콜. 각 요청은 독립적으로 처리되며, 이전 요청의 상태를 유지하지 않는다.
  • 서버는 클라이언트의 이전 요청 정보를 기억하지 않는다.
  • 세션 관리, 쿠키, 토큰 등을 통해 상태를 유지하는 방법이 필요하다.
  • 로그인이 필요 없는 단순한 서비스 소개 화면인 경우 무상태로 만들어도 되지만, 상태를 유지해야 하는 로그인 같은 경우는 브라우저 쿠키, 서버 세션 등으로 상태를 유지해야 하는 경우가 있으며 상태 유지는 최소한만 사용하는 것이 좋다.
[무상태성]
장점 : 서버 확장성이 높다, 무상태는 응답 서버를 쉽게 바꿀 수 있으므로.
단점 : 클라이언트가 추가 데이터를 전송해야 한다.

유연성 및 확장성

  • HTTP는 다양한 데이터 포맷을 지원하며, 텍스트뿐만 아니라 이미지, 비디오, JSON 등 다양한 형태의 데이터를 전송할 수 있다.
  • 또한 HTTP 헤더를 통해 메타데이터를 전송할 수 있어, 커스터마이징이 용이하다.

 


 

HTTP 메시지

[HTTP 요청 메시지]

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
  • HTTP 메서드 (GET: 조회) ex)  GET
  • 요청 대상  ex)  /search?q=hello&hl=ko
  • HTTP Version ex)  HTTP/1.1

 

[HTTP 응답 메시지]

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>
      • HTTP 버전 ex)  HTTP/1.1
      • HTTP 상태 코드: 요청 성공, 실패를 나타냄 ex)  200
      • 이유 문구 (사람이 이해할 수 있는 짧은 상태 코드 설명 글) ex)  OK
      • HTTP 헤더 : HTTP 전송에 필요한 모든 부가정보 (메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등) ex) Content-Type: text/html;charset=UTF-8 Content-Length: 3423
      • HTTP 메시지 바디 : 실제 전송할 데이터 (HTML 문서, 이미지, 영상, JSON 등등 byte 표현할 있는 모든 데이터 전송 가능

 


HTTP 메서드

  • GET: 리소스 조회
  • POST: 요청 데이터 처리, 주로 등록에 사용
  • PUT: 리소스를 대체, 해당 리소스가 없으면 생성
  • PATCH: 리소스 부분 변경
  • DELETE: 리소스 삭제

 

HTTP 주요메서드

GET

  • 리소스 조회에 주로 사용되는 메서드이다.
  • 서버에 전달하고 싶은 데이터는 쿼리 파라미터를 통해서 전달한다.
  • 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.

 

POST

  • 요청 데이터 처리에 주로 사용 되는 메서드이다.
  • 메시지 바디를 통해 서버로 요청 데이터 전달한다.
  • 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
  • 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용한다.

 

PUT

  • 리소스가 있으면 대체, 리소스가 없으면 생성하는 메서드 (덮어버린다)
  • 중요! 클라이언트가 리소스를 식별
  • 클라이언트가 리소스 위치를 알고 URI 지정

 

HTTP 메서드의 속성

  • 안전(Safe Methods) :호출해도 리소스를 변경하지 않는다.
  • 멱등(Idempotent Methods) : 한 호출하든 호출하든 100 호출하든 결과가 똑같다.
    •  POST는 멱등이 아님. 결제를 두 번 호출하면 결제가 중복될 수 있으니까!
  • 캐시가능(Cacheable Methods)
    • (GET, HEAD, POST, PATCH 캐시가능) 실제로는 GET, HEAD 정도만 캐시로 사용, 나머지는 구현이 쉽지 않다.

 


 

클라이언트에서 서버로 데이터 전송하는 방식은 크게 쿼리 파라미터를 통한 데이터 전송(GET, 검색 기능)과 메시지 바디를 이용한 데이터 전송(POST, PUT, PATCH, 회원가입, 주문, 등록, 변경 등) 2가지가 있다.

 

클라이언트에서 서버로 데이터 전송의 4가지 상황

1. 정적 데이터 조회

GET /static/star.jpg HTTP/1.1
Host: localhost:8080
  • 쿼리 파라미터를 사용하지 않고 리소스 경로로 단순하게 주로 이미지, 정적 텍스트 문서를 조회(GET)할 때 사용한다.

 

2. 동적 데이터 조회

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
  • 쿼리 파라미터를 사용하며 주로 검색, 조회 결과를 정렬하는 정렬 조건에 주로 사용한다. (GET)

 

3. HTML Form 통한 데이터 전송

GET

GET /save?username=kim&age=20 HTTP/1.1
Host: localhost:8080
  • 주로 조회에서만 사용한다. 리소스 변경이 발생하는 곳에서는 사용하지 않음.

 

POST

POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
username=kim&age=20
  • HTML Form submit시 POST 로 전송한다. 예) 회원 가입, 상품 주문, 데이터 변경
  • Content-Type: application/x-www-form-urlencoded 사용한다.
    •  form의 내용을 메시지 바디를 통해서 전송(key=value, 쿼리 파라미터 형식)
    •  전송 데이터를 url encoding 처리 ex) abc김 -> abc%EA%B9%80

 

HTML Form 전송은 GET, POST만 지원

 

 

multipart/form-data

<form action="/save" method="post" enctype="multipart/form-data">
<input type="text" name="username" />
<input type="text" name="age" />
<input type="file" name="file1" />
<button type="submit">전송</button>
</form>
POST /save HTTP/1.1
Host: localhost:8080
Content-Type: multipart/form-data; boundary=-----XXX
Content-Length: 10457

------XXX
Content-Disposition: form-data; name="username"

kim
------XXX
Content-Disposition: form-data; name="age"

20
------XXX
Content-Disposition: form-data; name="file1"; filename="intro.png"
Content-Type: image/png

109238a9o0p3eqwokjasd09ou3oirjwoe9u34ouief...
------XXX--
  • 파일 업로드 같은 바이너리 데이터 전송시 사용한다.
  • 다른 종류의 여러 파일과 폼의 내용 함께 전송 가능하다.

 

 

4. HTTP API 통한 데이터 전송

POST /members HTTP/1.1
Content-Type: application/json
{
"username": "young",
"age": 20
}
  • HTML에서 Form 전송 대신 자바 스크립트를 통한 통신에 사용한다 (AJAX)
  • 예) React, VueJs 같은 웹 클라이언트와 API 통신
  • GET: 조회, 쿼리 파라미터로 데이터 전달
  • POST, PUT, PATCH: 메시지 바디를 통해 데이터 전송
  • Content-Type: application/json을 주로 사용 (사실상 표준)

 

 

 

 


  • 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 참고하여 정리하였습니다.
  • 참고
    • https://ddururiiiiiii.tistory.com/485
    • [스프링(Spring)] HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법 (@RequestParam, @RequestBody, @ModelAttribute 이해하기)
 

[스프링(Spring)] HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법 (@RequestPa

HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 가장 많이 사용하는 3가지 방법과 스프링과 연계하여 @RequestParam, @RequestBody, @ModelAttribute 어노테이션에 대해 이해해보자!  [HTT

ddururiiiiiii.tistory.com

 

728x90
320x100