Network

HTTP GET / POST

Z00_HWAN_99 2024. 9. 8. 19:20
728x90
반응형

HTTP(Hypertext Transfer Protocol)에서 GET과 POST는 웹 서버와 클라이언트 간에 데이터를 요청하거나 전송할 때 사용하는 가장 일반적인 두 가지 메서드다. 이 둘은 목적과 동작 방식에서 중요한 차이점이 있으며, 각각의 사용 사례에 따라 적절히 선택해야 한다.

 

HTTP GET

  • GET 메서드는 클라이언트가 서버로부터 데이터를 요청할 때 사용된다. 서버는 요청에 응답하여 요청된 데이터를 반환하며, GET 요청은 주로 읽기 작업을 수행하는 데 사용된다.

특징

  • 데이터 전송 방식 : GET 요청에서는 요청 데이터를 URL의 쿼리 문자열에 포함하여 서버에 전송한다. 쿼리 문자열은 ? 뒤에 key-value 쌍으로 이루어지며, 여러 개의 매개변수를 &로 연결한다.
    • EX) https://example.com/search?query=HTTP&sort=recent
  • 요청 본문 없음 : GET 요청은 요청 본문이 없고, 모든 데이터를 URL에 포함시킨다.
  • 캐싱 : GET 요청은 캐시가 가능하다. 브라우저나 프록시 서버는 GET 요청의 응답을 저장해 두고, 동일한 요청을 다시 수행할 때 캐시된 데이터를 사용할 수 있다.
  • 길이 제한 : GET 요청은 URL 길이 제한이 있을 수 있다. 일반적으로 2048자(IE 기준) 정도로 제한되지만, 서버나 브라우저에 따라 다를 수 있다.
  • 멱등성 : GET 요청은 멱등성을 가진다. 즉, 같은 요청을 여러 번 보내더라도 서버 상태가 변하지 않는다.
  • 보안 측면 : GET 요청은 데이터를 URL에 노출하기 때문에, 민감한 정보를 전송할 때 사용하면 안 된다. URL은 브라우저 기록에 남고, 로그에 저장될 수도 있다.

사용 예시

  • 웹 페이지를 조회할 때( EX) 블로그 포스트, 뉴스 기사 등).
  • 검색 요청(검색어를 전달하여 결과를 받음).
  • API에서 데이터를 조회할 때( EX) 사용자 정보, 상품 목록 등).

예시 코드

  • GET /search?query=HTTP&sort=recent HTTP/1.1
    Host: example.com

 

HTTP POST

POST 메서드는 클라이언트가 서버로 데이터를 전송할 때 사용된다. 서버는 데이터를 받아서 처리하고, 그에 따라 응답을 반환한다. POST는 주로 서버의 상태를 변경하는 작업을 수행할 때 사용된다.

특징:

  • 데이터 전송 방식 : POST 요청에서는 데이터를 요청 본문에 포함하여 전송한다. 이는 GET 요청과 달리 URL에 데이터가 포함되지 않는다.
    • 예 : 사용자가 로그인할 때 ID와 비밀번호를 본문에 포함하여 서버로 전송.
  • 요청 본문 있음 : POST 요청은 본문(body)에 데이터를 포함할 수 있으며, 본문 형식은 주로 application/x-www-form-urlencoded 또는 multipart/form-data로 지정된다.
    • JSON, XML 등과 같은 다른 형식으로도 데이터를 전송할 수 있다.
  • 캐싱 불가능 : POST 요청은 기본적으로 캐시되지 않으며, 매번 서버에 새로운 요청을 보낸다.
  • 길이 제한 없음 : POST 요청은 본문에 데이터를 포함하므로 길이 제한이 없다. 대량의 데이터를 전송하는 데 적합하다.
  • 멱등성 아님 : POST 요청은 멱등성이 없다. 즉, 같은 요청을 여러 번 보내면 서버 상태가 변할 수 있다(예: 게시글 중복 작성, 결제 요청 등).
  • 보안 측면 : POST는 데이터가 URL에 노출되지 않고 본문에 포함되므로, GET보다 보안이 더 높다. 하지만 HTTPS를 사용하지 않는 한 본문도 암호화되지 않으므로 민감한 데이터는 반드시 HTTPS를 통해 전송해야 한다.

사용 예시

  • 사용자가 웹 폼을 제출할 때(예: 로그인, 회원가입, 댓글 작성 등).
  • 파일 업로드.
  • API에서 리소스를 생성하거나 서버의 상태를 변경할 때(예: 새로운 사용자 추가, 주문 생성 등).

예시코드

  • POST /login HTTP/1.1
    Host: example.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 32
    username=user&password=pass123

 

GET과 POST의 차이점

특징 GET POST
목적 데이터를 요청 데이터를 서버로 전송
데이터 전송 방식 URL에 쿼리 문자열로 전송 요청 본문에 데이터를 포함하여 전송
데이터 크기 제한적(일반적으로 URL 길이 제한 있음) 제한 없음
캐싱 가능 불가능
보안 데이터가 URL에 노출되므로 보안에 취약 URL에 노출되지 않으나, HTTPS를 사용해야 보안 강화
멱등성 멱등성 있음(같은 요청을 여러 번 해도 서버 상태 변하지 않음) 멱등성 없음(같은 요청을 여러 번 보내면 상태 변할 수 있음)
주요 사용 사례 웹 페이지 조회, 데이터 조회 폼 제출, 파일 업로드, 데이터 생성

 

언제 GET과 POST를 사용해야 할까?

  • GET: 데이터를 조회하거나 서버의 상태를 변경하지 않는 작업에 적합하다. 예를 들어, 사용자가 뉴스 기사를 읽거나, 특정 리소스를 조회할 때.
  • POST: 서버의 상태를 변경하거나, 보안이 필요한 데이터를 전송할 때 적합하다. 예를 들어, 사용자가 로그인하거나, 새로운 데이터를 생성할 때.

이러한 차이점을 고려하여 GET과 POST를 적절히 사용하면, 웹 애플리케이션의 성능과 보안을 최적화할 수 있다.

728x90
반응형

'Network' 카테고리의 다른 글

웹 아키텍처 분석  (3) 2024.09.08
쿠키와 세션  (2) 2024.09.08
웹의 핵심 기술 HTTP 프로토콜  (1) 2024.09.08
자원을 지정하는 URL  (2) 2024.09.07
웹을 구성하는 3대 요소  (0) 2024.09.07