맨위로가기

POST (HTTP)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

POST는 웹 브라우저가 서버에 데이터를 전송하는 데 사용되는 HTTP 메서드 중 하나이다. HTML 폼을 통해 데이터를 전송할 때 기본적으로 application/x-www-form-urlencoded 미디어 타입을 사용하며, multipart/form-data 형식으로도 데이터를 제출할 수 있다. POST는 서버의 상태를 변경하는 요청에 적합하며, 멱등성을 가지지 않으므로 동일한 요청을 여러 번 보내는 것은 한 번만 보내는 것과 다른 결과를 초래할 수 있다. GET 메서드와 비교하여, POST는 긴 데이터를 전송하는 데 유용하며, 쿼리 문자열의 길이 제한을 극복할 수 있다.

더 읽어볼만한 페이지

  • HTTP - HTTPS
    HTTPS는 HTTP에 보안 기능이 더해진 통신 규약으로, 웹 브라우저와 서버 간 통신을 암호화하여 보안을 강화하지만, 인증서 비용, 서버 부하, 혼합 콘텐츠 문제 등의 단점도 존재한다.
  • HTTP - HTTP 쿠키
    HTTP 쿠키는 웹 서버가 사용자 브라우저에 저장하는 작은 텍스트 파일로, 웹 사이트가 방문 기록, 로그인 정보 등을 기억하여 HTTP의 상태 비저장성을 보완하고 세션 관리, 개인 설정, 사용자 추적 등에 활용되지만 개인 정보 보호 및 보안 문제에 대한 논란이 있다.
POST (HTTP)
HTTP 요청 메서드
종류HTTP 요청 메서드
POST
설명서버에 데이터를 제출하여 리소스를 생성하거나 업데이트
주요 특징데이터를 요청 본문에 담아 전송
길이 제한이 없음
보안적인 데이터 전송에 적합
용도새로운 리소스 생성 (예: 게시글 작성)
서버의 데이터 변경 (예: 댓글 작성, 파일 업로드)
복잡한 쿼리 수행
참조RFC 9110, section 9.3.3
기타 정보
다른 HTTP 메서드GET
HEAD
PUT
DELETE
OPTIONS
TRACE
CONNECT
PATCH

2. 데이터 전송 (Posting data)

POST 메서드는 클라이언트가 서버로 데이터를 전송하는 데 사용되며, 주로 웹 폼 제출에 활용된다. 웹 폼 제출 외에도 RESTful API에서 POST는 새로운 리소스를 생성하는 데 사용될 수 있다.

초기 웹 개발에서는 URI가 텍스트로 하위 항목을 설명해야 할 기술적인 이유가 없었고, 대부분의 웹 브라우저가 GET 또는 POST만 사용하도록 제한되어 있었기 때문에, POST가 리소스 생성 외에 수정, 삭제 등 다양한 작업에 활용되기도 했다.

1998년경부터 시맨틱 URL을 제공하려는 노력이 시작되었고, Ruby on Rails와 같은 웹 애플리케이션 프레임워크는 이러한 노력을 쉽게 만들었다. 또한, 클라이언트 측 스크립팅을 사용하거나 독립 실행형 앱을 작성하여 POST 외에 다른 HTTP 메서드를 활용할 수 있게 되면서,[3] POST의 원래 의미를 살리는 방향으로 발전하고 있다.

하지만 모든 웹 양식이 `method="post"`를 지정해야 하는 것은 아니다. 서버에서 정보를 검색하는 경우에는 `method="get"`을 사용하는 것이 더 적합하다.[4] HTTP GET이 데이터 검색에 부적합한 경우도 있는데, URL에 많은 양의 데이터를 지정해야 하는 경우가 대표적이다. 브라우저와 웹 서버는 처리할 수 있는 URL 길이에 제한이 있을 수 있으며, URL 및 쿼리 문자열에서 예약된 문자를 퍼센트 인코딩하면 길이가 크게 늘어날 수 있다. 예를 들어, Apache HTTP Server는 최대 4,000자까지 처리할 수 있지만,[5] Microsoft Internet Explorer는 2,048자로 제한된다.[6]

또한, 사용자 이름 및 비밀번호와 같은 민감한 정보를 제출해야 하는 경우에도 HTTP GET을 사용해서는 안 된다. HTTPS를 사용하더라도 브라우저 기록과 웹 서버 로그에 전체 URL이 일반 텍스트로 포함될 가능성이 있으며, 두 시스템 중 하나라도 해킹되면 정보가 노출될 수 있기 때문이다.[7] 이러한 경우에는 HTTP POST를 사용해야 한다.

2. 1. 웹 폼 제출 (Submitting web forms)

웹 브라우저가 웹 폼 요소로부터 POST 요청을 보낼 때 기본 인터넷 미디어 타입application/x-www-form-urlencoded이다.[13] 이것은 키와 값 쌍을 연관 배열 형태로 인코딩하는 포맷으로, 잠재적으로 중복된 키를 포함할 수 있다. 각 키-값 쌍은 '&' 문자로 구분되며, 각 키는 '=' 문자로 값과 구분된다. 키와 값은 모두 공백을 '+' 문자로 대체하고, 영숫자가 아닌 그 밖의 모든 문자는 퍼센트 인코딩 처리한다.[14]

예를 들어, 다음과 같은 키-값 쌍이 있다고 가정해 보자.



Name: Gareth Wylie

Age: 24

Formula: a + b == 13%!



이 키-값 쌍은 다음과 같이 인코딩된다.



Name=Gareth+Wylie&Age=24&Formula=a+%2B+b+%3D%3D+13%25%21



HTML 4.0부터는 multipart/form-data로 데이터를 제출할 수도 있으며, 이는 RFC 2388에 정의되어 있다. (HTML 3.2에 언급된, HTML 2.0의 확장으로 정의된 초기 실험 버전은 RFC 1867 문헌 참고)

폼이 속한 동일한 문서에 POST하는 특수한 경우를 포스트백이라고 한다.

2. 2. RESTful API와 POST

RESTful 에서 POST는 새로운 리소스를 생성하는 데 사용될 수 있다. 예를 들어 `http://example.com/customers` URI에 POST 요청을 보내 이름, 주소, 연락처 세부 정보 등을 포함하는 새로운 고객 정보를 생성할 수 있다.[1] 초기 웹 개발에서는 URI가 텍스트로 하위 항목을 설명해야 할 기술적인 이유가 없었고, 대부분의 웹 브라우저가 GET 또는 POST만 사용하도록 제한되어 있었기 때문에, POST가 리소스 생성 외에 수정, 삭제 등 다양한 작업에 활용되기도 했다.

1998년경부터 시맨틱 URL을 제공하려는 노력이 시작되었다.[2] Ruby on Rails와 같은 웹 애플리케이션 프레임워크는 이러한 노력을 쉽게 만들었다. 또한, 클라이언트 측 스크립팅을 사용하거나 독립 실행형 앱을 작성하여 POST 외에 다른 HTTP 메서드를 활용할 수 있게 되면서,[3] POST의 원래 의미를 살리는 방향으로 발전하고 있다.

3. 서버 상태 변화 (Affecting server state)

RFC 7231에 따르면 POST 메서드는 멱등성을 보장하지 않으므로, 동일한 요청을 반복하면 서버 상태가 변경될 수 있다. 블로그 게시물에 댓글을 달거나 온라인 투표를 하는 경우가 이에 해당한다.[11][10]

3. 1. 멱등성과 POST

RFC 7231에 따르면 POST 메서드는 멱등성을 가지지 않으므로, 여러 개의 동일한 요청이 요청을 한 번만 전송하는 것과 동일한 결과를 나타내지 않을 수 있다. 따라서 POST는 매번 수행할 때마다 상태를 변경하는 요청, 예를 들어 블로그 게시물에 댓글을 제출하거나 온라인 투표에 참여하는 데 적합하다. GET은 멱등성을 가지므로 부작용이 없으며, 멱등적 연산은 "두 번째 이후의 요청에 부작용이 없다".[11][10] 이러한 이유로 검색 엔진 색인기와 같은 웹 크롤러는 일반적으로 GET 및 HEAD 메서드만을 사용하여 자동화된 요청이 이러한 작업을 수행하는 것을 방지한다.

그러나 요청이 매우 긴 경우 등 POST가 멱등적 요청에도 사용되는 이유가 있다. URL에 대한 제한으로 인해 GET 메서드가 생성하는 쿼리 문자열이 매우 길어질 수 있으며, 특히 퍼센트 인코딩으로 인해 더욱 그렇다.[11]

3. 2. GET 메서드와의 비교

GET 메서드는 URL에 데이터를 포함하여 보내므로, URL 길이 제한 문제가 발생할 수 있다. Apache HTTP Server는 최대 4,000자,[5] Microsoft Internet Explorer는 2,048자의 URL 길이 제한을 가진다.[6] URL 및 쿼리 문자열에서 예약된 문자의 퍼센트 인코딩은 길이를 크게 늘릴 수 있다.[11]

또한, 사용자 이름 및 비밀번호와 같은 민감한 정보를 다른 데이터와 함께 제출해야 하는 경우 HTTP GET을 사용해서는 안 된다. HTTPS를 사용하여 전송 중 데이터를 가로채는 것을 방지하더라도 브라우저 기록과 웹 서버의 로그에는 전체 URL이 일반 텍스트로 포함될 가능성이 높으며, 두 시스템 중 하나라도 해킹되면 노출될 수 있다. 이러한 경우에는 HTTP POST를 사용해야 한다.[7]

4. 한국 웹 환경에서의 POST

한국의 웹 개발 환경에서도 POST는 회원 가입, 게시물 작성, 상품 구매 등 다양한 상황에서 활용된다.

4. 1. 보안 고려사항

POST 요청으로 전송되는 데이터는 암호화되지 않으면 제3자가 가로챌 위험이 있다. 따라서 HTTPS 프로토콜을 사용하여 데이터를 암호화하여 전송하는 것이 중요하다. 특히, 개인정보나 금융정보 등 민감한 데이터를 다룰 때는 HTTPS 사용이 필수적이다.

참조

[1] 논문 Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content - 4.3.3 POST http://tools.ietf.or[...] 2014-07-24
[2] 웹사이트 Cool URIs don't change http://www.w3.org/Pr[...] W3C 2012-10-17
[3] 웹사이트 Using HTTP PUT and DELETE methods in web applications http://blogs.perl.or[...] 2012-10-17
[4] 웹사이트 Form submission http://www.w3.org/TR[...] W3C 2012-10-17
[5] 웹사이트 REST and Max URL Size http://www.danrigsby[...] 2012-10-17
[6] 웹사이트 Maximum URL length is 2,048 characters in Internet Explorer http://support.micro[...] Microsoft
[7] 논문 Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content - 9.4 Disclosure of Sensitive Information in URIs http://tools.ietf.or[...] 2014-07-25
[8] 웹사이트 Hypertext Markup Language - 2.0 - Forms http://www.w3.org/Ma[...] World Wide Web Consortium 1995-09-22
[9] 웹사이트 Forms in HTML documents http://www.w3.org/TR[...]
[10] 문서 4.2.1 Safe Methods http://tools.ietf.or[...]
[11] 웹사이트 Methods GET and POST in HTML forms - what's the difference? https://jkorpela.fi/[...] Tampere University of Technology 2003-09-28
[12] 웹인용 Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content http://tools.ietf.or[...] 2014-07-24
[13] 웹인용 Hypertext Markup Language - 2.0 - Forms http://www.w3.org/Ma[...] World Wide Web Consortium 1995-09-22
[14] 웹인용 Forms in HTML documents http://www.w3.org/TR[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com