POST (HTTP)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
POST는 웹 브라우저가 서버에 데이터를 전송하는 데 사용되는 HTTP 메서드 중 하나이다. HTML 폼을 통해 데이터를 전송할 때 기본적으로 application/x-www-form-urlencoded 미디어 타입을 사용하며, multipart/form-data 형식으로도 데이터를 제출할 수 있다. POST는 서버의 상태를 변경하는 요청에 적합하며, 멱등성을 가지지 않으므로 동일한 요청을 여러 번 보내는 것은 한 번만 보내는 것과 다른 결과를 초래할 수 있다. GET 메서드와 비교하여, POST는 긴 데이터를 전송하는 데 유용하며, 쿼리 문자열의 길이 제한을 극복할 수 있다.
더 읽어볼만한 페이지
| 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