POST

HTTP POST 메서드는 서버로 데이터를 전송합니다. 요청 본문의 유형은 Content-Type 헤더로 나타냅니다.

PUTPOST의 차이는 멱등성으로, PUT은 멱등성을 가집니다. PUT은 한 번을 보내도, 여러 번을 연속으로 보내도 같은 효과를 보입니다. 즉, 부수 효과(side effect)가 없습니다.

POST 요청은 보통 HTML 양식을 통해 서버에 전송하며, 서버에 변경사항을 만듭니다. 이 경우의 콘텐츠 유형(Content-Type)은 <form> 요소의 enctype 특성이나 <input>, <button> 요소의 formenctype 특성 안에 적당한 문자열을 넣어 결정합니다.

  • application/x-www-form-urlencoded: &으로 분리되고, "=" 기호로 값과 키를 연결하는 key-value tuple로 인코딩되는 값입니다. 영어 알파벳이 아닌 문자들은 percent encoded 으로 인코딩됩니다. 따라서, 이 content type은 바이너리 데이터에 사용하기에는 적절치 않습니다. (바이너리 데이터에는 use multipart/form-data 를 사용해 주세요.)
  • multipart/form-data
  • text/plain

POST 요청을 HTML 양식 외의 다른 방법(XMLHttpRequest 등)으로 전송할 땐 요청의 본문이 어떤 형태도 취할 수 있습니다. HTTP 1.1 규격에 정의된 바와 같이, POST는 다음의 기능을 포함하는 균일한 메서드를 허용하도록 설계되었습니다.

  • 기존 리소스에 주석달기
  • 게시판, 뉴스 그룹, 메일링 리스트나 이와 유사한 시스템에 글 올리기
  • 회원가입 모달로 새로운 사용자 추가하기
  • 양식 전송 결과 등 데이터 블록을 데이터 처리 프로세스에 보내기
  • 이어붙이기 연산을 통한 데이터베이스 확장
요청에 본문 존재
성공 응답에 본문 존재
안전함 아니오
멱등성 아니오
캐시 가능 (en-US) 신선도 정보 포함 시
HTML 양식에서 사용 가능

구문

POST /index.html

예제

다음은 application/x-www-form-urlencoded 콘텐츠 유형을 사용하는 간단한 형태의 양식 제출 예시입니다.

POST / HTTP/1.1
Host: foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

say=Hi&to=Mom

multipart/form-data 콘텐츠 유형을 사용하는 예시입니다.

POST /test.html HTTP/1.1
Host: example.org
Content-Type: multipart/form-data;boundary="boundary"

--boundary
Content-Disposition: form-data; name="field1"

value1
--boundary
Content-Disposition: form-data; name="field2"; filename="example.txt"

value2
--boundary--

명세

Specification Title
RFC 7231, section 4.3.3: POST Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
RFC 2046, section 5.1.1: Common Syntax Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types

브라우저 호환성

BCD tables only load in the browser

같이 보기