====== HTTP ======
* HTTP1.1; RFC 2616
* Uniform 인터페이스, 스테이트리스 서버, 캐시 등을 구현하고 있는 Web의 기반 프로토콜
* TCP/IP 기반 Transmission Control Protocol / Internet Protocol
* 계층형 프로토콜
* 네트워크 인터페이스 계층
* 인터넷 계층; IP에 해당, 기본단위 패킷Packet
* 트랜스포트 계층; TCP에 해당, 커넥션 연결을 사용해 데이터의 누락 체크, 데이터의 도달 보증, 포트번호 1~65535, HTTP의 디폴트 80번.
* 애플리케이션(응용) 계층; 메일, DNS, HTTP를 실현,
^ 계층형 프로토콜 ^^
^ 애플리케이션 계층 | HTTP, NTP, SSH, SMTP, DNS |
^ 트랜스포트 계층 | UDP, TCP |
^ 인터넷 계층 | IP |
^ 네트워크 인터페이스 계층 | 이더넷 |
* HTTP 0.9; GET
* HTTP 1.0; RFC 1945, 헤더 도입, GET 이외의 메서드 추가.
* HTTP 1.1; RFC 2068, RFC 2616, HTTP 1.0의 기능에 더해 채널 전송, Accept 헤더에 의한 콘텐트 네고시에이션, 복잡한 캐시 컨트롤, 지속적 연결 등 추가.
* 클라이언트/서버; Request / Response. Request-Response Style 프로토콜, HTTP는 동기형 Synchronous 프로토콜
* 클라이언트
- 요청 메시지 구축
- 요청 메시지 송신
- (응답이 돌아올 때까지 대기)
- 응답 메시지 수신
- 응답 메시지 해석
- 클라이언트의 목적을 달성하기 위해 필요한 처리
* 서버
- (요청을 대기)
- 요청 메시지 수신
- 요청 메시지 해석
- 적절한 애플리케이션 프로그램으로 처리를 위임
- 애플리케이션 프로그램으로부터 결과를 취득
- 응답 메시지 구축
- 응답 메시지 송신
==== HTTP 메시지 ====
* 요청 메시지
* GET /test HTTP/1.1
Host: example.com
* 요청라인 Request-Line; 메서드 GET, 요청 URI/test, 프로토콜 버전 HTTP/1.1로 구성
* 헤더; 이름:값 구성
* 바디;
* 응답 메시지
* HTTP/1.1 200 OK
Content-Type: application/xhtml+xml; charset=utf-8
....
* 스테이터스 라인 Status Line; 프로토콜 버전 HTTP/1.1, 스테이터스 코드 200, 텍스트 구문OK 으로 구성
* 헤더; MIME Multipurpose Internet Mail Extension 미디어 타입 application/xhtml+xml과 그 문자 인코딩 방식 utf-8 지정
* 바디; 헤더와 바디는 빈 줄로 구분
* HTTP 메시지의 구성 요소
^ HTTP 메시지의 구조 ^
^ 스타트 라인(Start Line) ^
^ 헤더(Header) ^
^ 빈 줄(blank Line) ^
^ 바디(Body) ^
* HTTP의 스테이트리스성
* 애플리케이션 상태; Session State
* 자기 기술적 메시지 Self Descriptive Message
==== HTTP 메서드 ====
^ HTTP 메서드 ^^
^ 메서드 ^ 의미 ^
| GET | 리소스 취득 |
| POST | 서브 리소스의 작성, 리소스 데이터의 추가, 그 밖의 처리 |
| PUT | 리소스 갱신, 리소스 작성 |
| DELETE | 리소스 삭제 |
| HEAD | 리소스의 헤더(메타 데이터) 취득 |
| OPTIONS | 리소스가 서포트하는 메서드의 취득 |
| TRACE | 자기 앞으로 요청 메시지를 반환(루프 백) 시험 |
| CONNECT | 프록시 동작의 터널 접속으로 변경 |
* CRUD 성질 충족; GET, POST, PUT, DELETE
^ CRUD와 HTTP 메서드의 대응 ^^^
^ CRUD 명 ^ 의미 ^ 메서드 ^
| Create | 작성 | POST/PUT |
| Read | 읽기 | GET |
| Update | 갱신 | PUT |
| Delete | 삭제 | DELETE |
* GET - 리소스의 취득
* POST - 리소스의 작성, 추가
* PUT - 리소스의 갱신, 작성
* DELETE - 리소스의 삭제
* HEAD - 리소스의 헤더 취득
* OPTIONS - 리소스가 서포트하는 메서드의 취득
* POST를 PUT/DELETE 대신 사용하기도 한다
* _method 파라미터
* X-HTTP-Method-Override
* 조건부 요청 Conditional Request;
* 멱등성Idempotence과 안전성Safe
^ HTTP 메서드의 성질 ^^
^ 메서드 ^ 성질 ^
| GET, HEAD | 멱등이고 안전하다 |
| PUT, DELETE | 멱등이지만 안전하지 않다 |
| POST | 멱등이지도 안전하지도 않다 |
==== 스테이터스 코드 ====
* 1xx; 처리중, 처리가 계속되고 있음을 나타낸다. 클라이언트는 그대로 요청을 계속하던지 서버의 지시에 따라 프로토콜을 업데이트 하여 재전송
* 2xx; 성공, 요청이 성공했음을 나타냄
* 3xx; 리다이렉트, 다른 리소스로의 리다이렉트를 나타낸다. 클아이언트는 이 스테이터스 코드를 받았을 때 응답메시지의 Location 헤더를 보고 새로운 리소스로 접속
* 4xx; 클라이언트 에러, 클라이언트 에러를 나타낸다. 원인은 클라이언트의 요청에 있다. 에러를 해결하지 않는 한, 정상적인 결과를 얻을 수 없기 때문에 같은 요청을 그대로 재전송할 수는 없다.
* 5xx; 서버 에러, 서버 에러를 나타낸다. 원인이 서버에 있다. 서버 측의 원인이 해결되면, 동일한 요청을 재전송해서 정상적인 결과를 얻을 가능성이 있다
* 스테이터스 코드의 목록; IANA가 관리 http://j.mp/http_status_codes https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
* 200 OK - 요청 성공
* 201 Created - 리소스 작성 성공
* 301 Moved Permanently - 리소스의 항구적인 이동
* 303 See Other - 다른 URI의 참조
* 400 Bad Request - 요청 오류
* 401 Unauthorized - 접근 권한 없음, 인증 실패
* 404 Not Found - 리소스 없음
* 500 Internal Server Error - 서버 내부 에러
* 503 Service Unavailable - 서비스 정지
* 스테이터스 코드와 에러처리
* 프로토콜에 따른 포맷으로 에러른 반환
* Accept 헤더에 따른 포맷으로 에러를 반환
==== HTTP 헤더 ====
* 전자메일의 메시지 스펙 RFC822의 헤더형식을 빌려오는 식으로 추가, 메일 프로토콜이 한 방향으로 주고 받지만 One-Way, HTTP는 한 번의 통신으로 요청/응답의 두 가지 메시지를 주고 받음
* 날짜와 시간
^ 날짜 시간을 가지는 헤더 ^^^
^ 이용하는 메시지 ^ 헤더 ^ 의미 ^
| 요청과 응답 | Date | 메시지를 생성한 일시 |
| 요청 | If-Modified-Since | 조건부 GET으로 리소스의 갱신일시를 지정할 때 이용한다 |
| ::: | If-Unmodified-Since | 조건부 PUT, 조건부 DELETE로 리소스의 갱신일시를 지정할 때 이용한다 |
| 응답 | Expires | 응답을 캐시할 수 있는 기한 |
| ::: | Last-Modified | 리소스를 마지막으로 생신한 일시 |
| ::: | Retry-After | 다시 요청을 전송할 수 있는 일시의 기준 |
* MIME 미디어 타입
* Content-Type - 미디어 타입 지정
^ 타입 ^^^
^ 타입 ^ 의미 ^ 예 ^
| text | 사람이 읽고 직접 이해할 수 있는 텍스트 | text/plain |
| image | 그림 데이터 | image/jpeg |
| audio | 음성 데이터 | audio/mpeg |
| video | 동영상 데이터 | video/mp4 |
| application | 그 밖의 데이터 | application/pdf |
| multipart | 복수의 데이터로 이루어진 복합 데이터 | multipart/related |
| message | 전자메일 메시지 | message/rfc822 |
| model | 복수 차원으로 구성하는 모델 데이터 | model/vrml |
| example | 예시용 | example/foo-bar |
* charset 파라미터 - 문자 인코딩을 지정
^ 주요 서브타입 ^^
^ 타입 / 서브타입 ^ 의미 ^
| text/plain | 플레인 텍스트 |
| text/csv | CSV형식 텍스트 |
| text/css | CSS형식의 스타일 시트 |
| text/html | HTML 문서 |
| text/xml | XML 문서(비추천) |
| image/jpeg | JPEG 이미지 |
| image/gif | GIF 이미지 |
| image/png | PNG 이미지 |
| application/xml | XML 문서 |
| application/xhtml+xml | XHTML 문서 |
| application/atom+xml | Atom 문서 |
| application/atomsvc+xml | Atom의 서비스 문서 |
| application/atomcat+xml | Atom의 카테고리 문서 |
| application/javascript | JavaScript |
| application/json | JSON 문서 |
| application/msword | Word 문서 |
| application/vnd.ms-excel | Excel 문서 |
| application/vns.ms-powerpoint | PowerPoint 문서 |
| application/pdf | PDF 문서 |
| application/zip | ZIP 파일 |
| application/x-shockware-flash | Flash 오브젝트 |
| application/x-www-form-urlencoded | HTML 폼 형식 |
* 언어 태그Language Tag; Content-Language 헤더, RFC 4646 언어 태그 RFC 4647 태그의 비교방법이 정의
* 콘텐트 네고시에이션
* Accept - 처리할 수 있는 미디어 타입을 전달
* Accept-Charset - 처리할 수 있는 문자 인코딩 전달
* Accept-Language - 처리할 수 있는 언어를 전달
* Content-Length와 청크(chunk) 전송
* Content-Length - 바디의 길이를 지정
* 청크 전송 - 바디를 분할하여 전송
* 인증; Basic 인증, Digest 인증, 웹 API에서 WSSE WS-Security Extension 확장 스펙
* Basic 인증; 유저 이름과 패스워드를 Authorization 헤더에 넣어 요청마다 전송. 유저이름:패스워드를 Base64 인코딩, 보안 강도 확인 필요(SSL Secure Socket Layer, TLS Transport Layer Security, HTTPS HTTP over Secure Socket Layer 등)
* Digest 인증;
* 첼린지; nonce(number used once), qop(quality of protection) -> 'auth'나 'auth-init' 지정, opaque
* 다이제스트 생성과 송신
* WSSE 인증;
* OpenID와 OAuth, SSO Single Sign-on
* OpenID - 심플한 싱글 사인온; IdP(Identity Provider), SP(Service Provide)
* OAuth - 웹서비스 사이의 권한의 위임; 인가정보를 넘기는 기능
* 캐시
* 캐시용 헤더
* Pragma - 캐시를 억제
* Expires - 캐시의 유효기한
* Cache-Control - 상세한 캐시 방법을 지정
* 캐시용 헤더의 사용 구분
* 캐시를 시키지 않을 경우는 Pragma와 Cache-Control의 no-cache를 동시에 지정
* 캐시의 유효기간이 명확하게 정해저 있는 경우는 Expires를 지정
* 캐시의 유효기간을 상대적으로 지정하고자 하는 경우는 Cache-Control의 max-age로 상대시간을 지겅
* 조건부 GET
* If-Modified-Since - 리소스의 갱신일시를 조건으로 한다
* If-None-Match - 리소스의 ETag(엔티티 태그)를 조건으로 한다
* 지속적 접속 Persistent Connection; Pipelining
* 그 밖의 HTTP 헤더
* Content-Disposition - 파일명 지정
* Slug - 파일명과 힌트를 지정
==== Status Codes ====
* HTTP 1.1(RFC2616), WebDAV(RFC4918)
* 1xx; 처리중
* 100 Continue
* 바디: 없음
* 관련 메서드: 모두
* 요청 헤더: Expect
* 101 Switching Protocols
* 바디: 없음
* 관련 메서드: 모두
* 요청 헤더: Upgrade
* 2xx; 성공
* 200 OK
* 바디: GET의 경우는 리소스의 표현, 그 밖의 메서드의 경우는 처리 결과
* 관련 메서드: 모두
* 201 Created
* 바디: 신규 작성된 리소스의 표현, 혹은 처리결과의 설명
* 관련 메서드: POST, PUT
* 요청 헤더: Location
* 202 Accepted
* 바디: 처리 결과를 얻을 수 있는 리소스의 링크와 예상처리 시간
* 관련 메서드: 모두
* 요청 헤더: Location, Retry-After
* 203 Non-Authoritative Information
* 바디: GET의 경우는 리소스의 표현, 그 밖의 메서드의 경우는 처리 결과
* 관련 메서드: 모두
* 204 No Content
* 바디: 없음
* 관련 메서드: POST, PUT, DELETE
* 205 Reset Content
* 바디: 없음
* 관련 메서드: 모두
* 206 Partial Content
* 바디: 지정된 범위의 리소스 표현
* 관련 메서드: GET
* 요청 헤더: Range, If-Range
* 응답 헤더: Content-Range
* 207 Multi-Status
* 바디: WebDAV가 정의하는 멀티 스테이터스를 표현하는 XML 문서
* 관련 메서드: POST
* 3xx; 리다이렉트
* 300 Multiple Choices
* 바디: 후보 URI의 리스트
* 관련 메서드: 모두
* 301 Moved Permanently
* 바디: 이동할 곳의 URI 링크를 포함한 HTML 등
* 관련 메서드: 모두
* 응답 헤더: Location
* 302 Found
* 바디: 이동할 곳의 URI 링크를 포함한 HTML 등
* 관련 메서드: POST
* 응답 헤더: Location
* 303 See Other
* 바디: 이동할 곳의 URI 링크를 포함한 HTML 등
* 관련 메서드: POST
* 응답 헤더: Location
* 304 Not Modified
* 바디: 없음
* 관련 메서드: GET
* 요청 헤더: If-Modified-Since, If-None-Match
* 응답 헤더: ETag, Last-Modified
* 305 Use Proxy
* 바디: 프록시가 필요하다는 것을 설명하는 HTML 등
* 관련 메서드: 모두
* 응답 헤더: Location
* 307 Temporary Redirected
* 바디: 이동할 곳의 URI 링크를 포함한 HTML 등
* 관련 메서드: 모두
* 응답 헤더: Location
* 4xx; 클라이언트 에러
* 400 Bas Request
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 401 Unauthorized
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 요청 헤더: Authorization
* 응답 헤더: WWW-Authenticate
* 402 Payment Required
* 바디: 결제방식을 설명하는 문서
* 관련 메서드: 모두
* 403 Forbidden
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 404 Not Found
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 405 Method Not Allowed
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 응답 헤더: Allow
* 406 Not Acceptable
* 바디: 후보 URI 리스트
* 관련 메서드: 모두
* 요청 헤더: Accept, Accept-Charset, Accept-Language, Accept-Encoding, Accept-Range
* 407 Proxy Authentication Required
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 요청 헤더: Proxy-Authorization
* 응답 헤더: Proxy-Authenticate
* 408 Request Timeout
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 응답 헤더: Connection
* 409 Conflict
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: PUT, POST, DELETE
* 응답 헤더: Location
* 410 Gone
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 411 Length Required
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 요청 헤더: Content-Length
* 412 Precondition Failed
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: PUT, POST
* 요청 헤더: If-Match, If-None-Match, If-Unmodified-Since
* 응답 헤더: ETag, Last-Modified
* 413 Request Entity Too Large
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 응답 헤더: Connection
* 414 Request-URI Too Long
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 415 Unsupported Media Type
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: PUT, POST
* 요청 헤더: Content-Type
* 416 Requested Range Not Satisfiable
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: GET
* 요청 헤더: Range
* 417 Expectation Failed
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 요청 헤더: Expect
* 422 Unprocessable Entity
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: POST, PUT
* 423 Locked
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: PUT, COPY, MOVE, LOCK
* 424 Failed Dependency
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 5xx; 서버 에러
* 500 Internal Server Error
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 501 Not Implemented
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 502 Bad Gateway
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 503 Service Unavailable
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 응답 메서드: Retry-After
* 504 Gateway Timeout
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
* 505 HTTP Version Not Supported
* 바디: 에러의 이유를 설명하는 문서
* 관련 메서드: 모두
==== HTTP Headers ====
* 서버 정보
* Date
* 이용하는 메시지: 요청, 응답
* 값: 일시
* Retry-After
* 이용하는 메시지: 응답
* 값: 일시 또는 수치(초)
* 관련 스테이터스 코드: 202 Accepted, 503 Service Unavailable
* Server
* 이용하는 메시지: 응답
* 값: 서버 소프트웨어의 명칭과 버전
* Set-Cookie
* 이용하는 메시지: 응답
* 값: 문자열
* Cookie의 스펙 RFC2965
* 클라이언트 정보
* Cookie
* 이용하는 메시지: 요청
* 값: 문자열
* Expect
* 이용하는 메시지: 요청
* 값: 100-continue
* 관련 스테이터스 코드: 100 Continue, 417 Expectation Failed
* From
* 이용하는 메시지: 요청
* 값: 메일 주소
* Referer
* 이용하는 메시지: 요청
* 값: URI
* User-Agent
* 이용하는 메시지: 요청
* 값: 클라이언트 소프트웨어의 명칭과 버전
* 리소스 정보
* Content-Encoding
* 이용하는 메시지: 요청, 응답
* 값: 압축방식
* Content-Language
* 이용하는 메시지: 요청, 응답
* 값: 언어 태그
* Content-Length
* 이용하는 메시지: 요청, 응답
* 값: 10진수 값(바이트)
* Content-MD5
* 이용하는 메시지: 요청, 응답
* 값: MD5 해시값
* Content-Type
* 이용하는 메시지: 요청, 응답
* 값: 미디어 타입
* Content-Location
* 이용하는 메시지: 응답
* 값: URI
* Last-Modified
* 이용하는 메시지: 응답
* 값: 일시
* Location
* 이용하는 메시지: 응답
* 값: URI
* Host
* 이용하는 메시지: 요청
* 값: 호스트명과 포트번호
* 콘텐트 네고시에이션
* Accept
* 이용하는 메시지: 요청
* 값: 미디어 타입의 우선도
* 관련 스테이터스 코드: 300 Multiple Choices, 406 Not Acceptable
* Accept-Charset
* 이용하는 메시지: 요청
* 값: 문자 인코딩의 우선도
* 관련 스테이터스 코드: 300 Multiple Choices, 406 Not Acceptable
* Accept-Encoding
* 이용하는 메시지: 요청
* 값: 압축방식의 우선도
* 관련 스테이터스 코드: 300 Multiple Choices, 406 Not Acceptable
* Accept-Language
* 이용하는 메시지: 요청
* 값: 언어 태그의 우선도
* 관련 스테이터스 코드: 300 Multiple Choices, 406 Not Acceptable
* Vary
* 이용하는 메시지: 응답
* 값: Accept-* 헤더의 리스트
* 조건부 요청
* ETag
* 이용하는 메시지: 응답
* 값: Etag의 값을 나타내는 문자열
* If-None-Match
* 이용하는 메시지: 요청
* 값: ETag
* 관련 메서드: GET
* If-Modified-Since
* 이용하는 메시지: 요청
* 값: 일시
* 관련 메서드: GET
* If-Match
* 이용하는 메시지: 요청
* 값: ETag
* 관련 메서드: PUT, DELETE
* 관련 스테이터스 코드: 412 Precondition Failed
* If-Unmodified-Since
* 이용하는 메시지: 요청
* 값: 일시
* 관련 메서드: PUT, DELETE
* 관련 스테이터스 코드: 412 Precondition Failed
* 부준적 GET
* Range
* 이용하는 메시지: 요청
* 값: 취득하고 싶은 부분(바이트)
* 관련 메서드: GET
* If-Range
* 이용하는 메시지: 요청
* 값: ETag 또는 일시
* 관련 메서드: GET
* Accept-Range
* 이용하는 메시지: 응답
* 값: bytes 또는 none
* 관련 메서드: GET, HEAD
* 관련 스테이터스 코드: 206 Partial Content
* Content-Range
* 이용하는 메시지: 응답
* 값: 바이트 폭
* 관련 메서드: GET
* 관련 스테이터스 코드: 206 Partial Content
* 캐시
* Pragma
* 이용하는 메시지: 요청, 응답
* 값: no-cache
* Cache-Control
* 이용하는 메시지: 요청, 응답
* 값: 스펙에서 정해진 컨트롤 식별자 no-cache, max-age: xxxx 등
* Expires
* 이용하는 메시지: 응답
* 값: 일시
* Age
* 이용하는 메시지: 응답
* 값: 경과시간(초)
* 인증
* WWW-Authenticate
* 이용하는 메시지: 응답
* 값: 인증방식
* 관련 스테이터스 코드: 401 Unauthorized
* Authorization
* 이용하는 메시지: 요청
* 값: 인증방식
* 관련 스테이터스 코드: 401 Unauthorized
* Proxy-Authenticate
* 이용하는 메시지: 응답
* 값: 인증방식
* 관련 스테이터스 코드: 407 Proxy Authentication Required
* Proxy-Authorization
* 이용하는 메시지: 요청
* 값: 인증방식
* X-WSSE
* 이용하는 메시지: 요청
* 값: 인증방식
* 청크 전송
* Transfer-Encoding
* 이용하는 메시지: 요청, 응답
* 값: chunked
* Trailer
* 이용하는 메시지: 응답
* 값: 헤더명 리스트
* TE
* 이용하는 메시지: 요청
* 값: trailer
* 기타
* Allow
* 이용하는 메시지: 응답
* 값: 메서드 리스트
* 관련 메서드: OPTIONS
* 관련 스테이터스 코드: 405 Method Not Allowed
* Connection
* 이용하는 메시지: 응답, 요청
* 값: close
* Max-Forward
* 이용하는 메시지: 요청
* 값: 수치(횟수)
* 관련 메서드: TRACE, OPTIONS
* Upgrade
* 이용하는 메시지: 요청, 응답
* 값: 프로토콜 리스트
* 관련 스테이터스 코드: 101 Switching Protocols
* Via
* 이용하는 메시지: 요청, 응답
* 값: 중개자의 호스트명, 포트번호, 프로토콜 버전
* Warning
* 이용하는 메시지: 응답
* 값: 에러 코드와 텍스트 구문
* Content-Disposition
* 이용하는 메시지: 요청, 응답
* 값: 문자열
* Slug
* 이용하는 메시지: 요청
* 값: %인코딩한 문자열
* 관련 메서드: POST
* X-HTTP-Override
* 이용하는 메시지: 요청
* 값: HTTP 메서드밍
* 관련 메서드: POST
===== References =====
* [[https://developer.mozilla.org/ko/docs/Web/HTTP|HTTP 자습서]]