본문 바로가기
Dev

GET & POST 메서드

by memory-log 2020. 9. 23.

GET 메서드

HTTP GET 메서드는 특정한 리소스를 가져오도록 요청한다. 

GET 요청은 데이터를 가져올 때만 사용해야 한다.

 

GET /index.html

 

성공 시 XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴한다.

에러 발생시 : 404 (Not found) 에러 or 400 (Bad request) 에러가 발생한다.

주요 특징

안전함, 멱등성, 캐시 가능
  • 데이터를 읽거나 검색시 사용 (수정시 사용X)
  • 데이터의 변형의 위험없이 사용 가능
  • 같은 요청을 여러 번 하더라도 항상 같은 응답 리턴
  • GET을 데이터를 변경하는 등의 안전하지 않은 연산에 사용 불가

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--

 

POST 메서드

HTTP POST 메서드는 서버로 데이터를 전송한다.

요청 본문의 유형은 Content-Type 헤더로 나타낸다.

 

POST /index.html

 

메소드는 주로 새로운 리소스를 생성(create)할 때 사용된다.

하위 리소스(부모 리소스의 하위 리소스)들을 생성하는데 사용된다.

 

같은 POST 요청을 반복해서 했을 때 항상 같은 결과물이 나오는 것을 보장하지 않는다. 그러므로 두 개의 같은 POST 요청을 보내면 같은 정보를 담은 두 개의 다른 resource를 반환할 가능성이 높다.


멱등성

동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말한다.

 

멱등성 메서드에는 통계 기록 등을 제외하면 어떠한 사이드 이펙트도 존재해서는 안된다.

모든 안전한 메서드는 멱등성도 가진다.

 

GET 과 POST 

HTML의 <form>태그에 method="POST" 또는 method="GET"(기본값)을 모두 사용 가능하다.

GET, HEAD, PUT, DELETE 메서드는 멱등성을 가지며, POST 메서드는 그렇지 않다. 

요청시

- GET 요청은 모든 필요한 데이터를 URL에 포함하여 요청한다.

- POST 요청은 클라이언트에서 서버로 전송할 때 추가적인 데이터를 body에 포함할 수 있다.

 

사용시

- GET 메소드를 사용하면 모든 form data는 URL로 인코딩되어 action URL에 query string parameters로 전달된다.

- POST 메소드를 사용하면 form data는 HTTP request의 message body에 나타날 것이다.

 

 

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

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

 

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

  • 기존 리소스에 주석달기
  • 게시판, 뉴스 그룹, 메일링 리스트나 이와 유사한 시스템에 글 올리기
  • 회원가입 모달로 새로운 사용자 추가하기
  • 양식 전송 결과 등 데이터 블록을 데이터 처리 프로세스에 보내기
  • 이어붙이기 연산을 통한 데이터베이스 확장

 

 

 

developer.mozilla.org/ko/docs/Web/HTTP/Methods/GET

 

GET

HTTP GET 메서드는 특정한 리소스를 가져오도록 요청합니다.

developer.mozilla.org

developer.mozilla.org/ko/docs/Web/HTTP/Methods/POST

 

POST

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

developer.mozilla.org

 

'Dev' 카테고리의 다른 글

Deno 디노  (0) 2020.10.01
canvas tutorial 1  (0) 2020.09.26
디자인 시스템과 컴포넌트  (0) 2020.09.23
commit messages  (0) 2020.09.21
Npm Yarn CLI 단축 명령어  (0) 2020.09.21

댓글