--- title: POST slug: Web/HTTP/Methods/POST tags: - HTTP - Reference - Request method translation_of: Web/HTTP/Methods/POST ---
HTTP POST
메서드는 서버로 데이터를 전송합니다. 요청 본문의 유형은 {{httpheader("Content-Type")}} 헤더로 나타냅니다.
{{httpmethod("PUT")}}과 POST
의 차이는 {{glossary("idempotent", "멱등성")}}으로, PUT
은 멱등성을 가집니다. PUT
은 한 번을 보내도, 여러 번을 연속으로 보내도 같은 효과를 보입니다. 즉, 부수 효과(side effect)가 없습니다.
POST
요청은 보통 HTML 양식을 통해 서버에 전송하며, 서버에 변경사항을 만듭니다. 이 경우의 콘텐츠 유형(Content-Type
)은 {{HTMLElement("form")}} 요소의 {{htmlattrxref("enctype", "form")}} 특성이나 {{HTMLElement("input") }}, {{HTMLElement("button")}} 요소의 {{htmlattrxref("formenctype", "input")}} 특성 안에 적당한 문자열을 넣어 결정합니다.
application/
x-www-form-urlencoded
: &으로 분리되고, "=" 기호로 값과 키를 연결하는 key-value tuple로 인코딩되는 값입니다. 영어 알파벳이 아닌 문자들은 {{glossary("percent encoded")}} 으로 인코딩됩니다. 따라서, 이 content type은 바이너리 데이터에 사용하기에는 적절치 않습니다. (바이너리 데이터에는 use multipart/form-data
를 사용해 주세요.)multipart/form-data
text/plain
POST
요청을 HTML 양식 외의 다른 방법({{domxref("XMLHttpRequest")}} 등)으로 전송할 땐 요청의 본문이 어떤 형태도 취할 수 있습니다. HTTP 1.1 규격에 정의된 바와 같이, POST
는 다음의 기능을 포함하는 균일한 메서드를 허용하도록 설계되었습니다.
요청에 본문 존재 | 예 |
---|---|
성공 응답에 본문 존재 | 예 |
{{Glossary("Safe", "안전함")}} | 아니오 |
{{Glossary("Idempotent", "멱등성")}} | 아니오 |
{{Glossary("Cacheable", "캐시 가능")}} | 신선도 정보 포함 시 |
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", "POST", "4.3.3")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content |
{{RFC("2046", "Common Syntax", "5.1.1")}} | Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types |
{{Compat("http.methods.POST")}}