HTTP 요청 메소드(GET, POST)

kiki97 ㅣ 2022. 10. 21. 19:40

반응형

HTTP 요청 메소드

URL을 이용하면 서버에 특정 데이터를 요청할 수 있다.

여기서 요청하는 데이터에 특정 동작을 수행하고 싶으면 HTTP 요청 메소드(Http Request Methods)를 이용한다.

일반적으로 HTTP 요청 메서드는 HTTP Verbs라고도 불리우며 아래와 같이 주요 메서드를 갖고 있다.

  • GET : 존재하는 자원에 대한 요청
  • POST : 새로운 자원을 생성
  • PUT : 존재하는 자원에 대한 변경
  • DELETE : 존재하는 자원에 대한 삭제

GET방식

클라이언트에서 서버로 어떠한 리소스 정보를 요청하기 위해(데이터를 읽거나 검색할때) 사용되는 메서드

GET은 요청을 전송할 때 필요한 데이터를 쿼리스트링을 통해 전송한다.

URL의 끝에 ? 와 함께 이름과 값으로 상을 이루는 요청 파라미터를 쿼리스트링이라고 부른다.

쿼리스트링을 사용하면 URL에 조회 조건을 표시하기 때문에 특정 페이지를 링크하거나 북마크할 수 있다.

www.example-url.com/resources?name1=value1&name2=value2
  • 만약, 요청 파라미터가 여러 개면 &로 연결한다. 
  • 요청 파라미터명은 nam1, nam2
  • 각각의 파라미터는 value1, value2라는 값으로 서버에 요청을 보낸다.

 

GET은 불필요한 요청을 제한하기 위해 요청이 캐시가 될 수 있다.
JS,CSS같은 정적 컨텐츠는 데이터양이 크고, 변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가없다. 
정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시로해두고,
동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용한다.
그래서 프론트엔드 개발을 하다보면 정적 컨텐츠가 캐시돼 컨텐츠를 변경해도 내용이 바뀌지 않는 경우가 종종 발생한다. 
이 때는 브라우저의 캐시를 지우고 다시 컨텐츠를 조회하면 된다.
  • GET 요청은 캐시가 가능하다. 
  • :GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 
    리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
  • GET 요청은 브라우저 히스토리에 남는다.
  • GET 요청을 북마크에 추가할 수 있다.
  • GET 요청은 길이 제한이 있다.
  • GET 요청은 중요한 정보를 다루면 안된다. (파라미터 내용이 노출돼서)
  • GET 요청은 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다.(데이터의 변형 위험 없이 사용가능)

POST방식

리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는 메서드

데이터를 HTTP 메세지의 Body에 담아서 전송한다.(길이의 제한 없음)

크롬 개발자 도구로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우 반드시 암호화해 전송해야한다. 

POST로 요청을 보낼 때는 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야한다.

데이터 타입을 표시하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추한다.
만약, 알 수 없는 경우에는  application/octet-stream로 요청을 처리한다.
  • POST 요청은 캐시되지 않습니다.
  • POST 요청은 브라우저 기록에 남아 있지 않습니다.
  • POST 요청을 북마크에 추가할 수 없습니다.
  • POST 요청에는 데이터 길이에 대한 제한이 없습니다.
  • Post 요청 중 자원 생성은 201(Created) HTTP 응답 코드를 반환합니다.

GET과 POST에 차이점

 

 

  GET POST
캐시 ⭕️
브라우저 기록 ⭕️
북마크 추가 ⭕️
데이터 길이 제한 ⭕️
HTTP 응답 코드 200(Ok) 201(Created)
언제 주로 사용하는가? 리소스 요청 리소스 생성
리소스 전달 방식 쿼리스트링 HTTP Body
idempotent ⭕️

 

idempotent(멱등성)란??

연산을 여러번 적용하더라도 결과가 달라지지 않는 성질

즉, 멱등이라는 것은 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 한다.

 

GET으로 서버에 동일한 요청을 여러번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미한다.

따라서 GET은 서버의 데이터나 상태를 변경시키지 않아야한다.

예) 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위를 GET으로 요청하게 된다.

 

POST는 서버의 상태나 데이터를 변경시킬 때 사용


출처

https://brilliantdevelop.tistory.com/32

https://velog.io/@songyouhyun/Get과-Post의-차이를-아시나요