본문 바로가기

Web Sever 개발과 CS 기초/네트워크 지식

리퀘스트 메소드와 HTTP 상태 코드

리퀘스트 메소드 종류와 특징

GET 메소드

  • 클라이언트가 서버에 있는 데이터를 요청할 때 사용한다.
  • url기반으로 데이터를 요구하는 방법이다.
  • (사용 방법) (쿼리 스트링 방식) URL 끝에 ? 를 붙이고 그 다음에, 요청 정보를 쿼리 스트링 방식으로 작성해서 보낸다.

쿼리 스트링 방식이란, URL ? 뒤에 Key = value 형식으로 원하는 정보를 서버에게 요청하는 방식이다. 여러 개의 정보를 요청할 때는 &를 붙여서 사용한다.

ex) https://comic.naver.com/webtoon/detail**?titleId=796218&no=24&weekday=sat**

→ 네이버 웹툰 서버에 titleld은 796218&no=24와 weekday는 sat인 데이터를 요청한다.

  • 쿼리 스트링 방식(URL + 파라미터) 은 255자 제한이 있기 때문에 대용량 데이터를 전송하기 어렵다.
  • 요청 정보를 사용자가 확인 할 수 있지만, POST방식보다 보안이 취약하다.
  • 리퀘스트 메세지 바디는 비워져서 전송한다.
  • GET 메소드로 한번 요청된 정보는 브라우저에서 캐시 해두고, 동일한 요청이 발생 할 때, 캐시된 데이터를 사용한다.

→ 캐싱 방식으로 더 빠른 통신이 가능하다.

POST 메소드

  • 클라이언트가 서버에 있는 데이터를 생성을 요청할 때 사용한다.
  • 클라이언트가 보내는 데이터는 message body에 숨겨져서 보내진다. 헤더 Content-Type에 보내는 데이터 타입을 표시해서 같이 보낸다.
  • GET 방식보다, 보안이 강하고, 대용량 데이터 전송하기 좋다.
  • GET 방식과 달리 캐싱을 사용할 수 없다.

PUT 메소드

  • 클라이언트가 서버에 있는 데이터 생성과 수정을 요청할 때 사용한다.
  • message body에 수정하고 싶은 데이터를 넣어서 보낸다.

+POST와 PUT의 차이

POST 메소드는 데이터를 생성할 때 사용한다. POST를 할 때마다 서버에서는 새로운 리소스를 생성한다.

PUT 메소드는 데이터를 새로 생성하기도 하지만, 업데이트할 때 많이 사용된다. PUT 메소드와 식별자가 있는 데이터를 함께 보내면, 서버는 식별자와 일치하는 데이터를 수정하게 된다. PUT 메소드는 요청 시 마다 같은 식별자가 일치하는 리소스를 반환한다.

+PATCH 메소드는 요청을 보낼 때 수정하는 일부분만 보내면 되고 일부분의 교체를 의미한다.

예를 들어 '{"a" : 1, "b" : 2}'가 있을 때 b를 3으로 바꾼다고 했을 때 'patch'는 '{"b" : 3}' 이런 식으로 부분적으로 보내어 데이터를 수정한다.

DELETE 메소드

  • 클라이언트가 서버에 있는 특정 데이터를 삭제를 요청할 때 사용한다.
  • URL을 통해서 삭제하고 싶은 데이터를 서버에게 알린다. 그래서 message body는 비워져 있다.

HTTP 상태 코드.

상태 코드란, 클라이언트 요청에 대한 서버의 응답 결과를 정해진 코드로 나타낸 것이다.

자주 사용 되는 상태 코드를 알아보자.

1XX : Information responses

100번대 상태 코드는 리퀘스트를 받아들여서 현재 처리 중임을 알려준다.

  • 100 Continue

리퀘스트처리가 진행 중임을 알린다.

2XX : Successful responses

200번대 상태 코드는 요청이 성공 되었음을 알려준다.

  • 200 OK

요청이 성공적 처리되었음을 알린다. 리퀘스트 메소드 종류에 따라, 정보가 메세지 바디에 들어있을 수도 있고, 없을 수도 있다.

주로 GET요청에 따른 응답으로 사용된다.

  • 201 Created

요청이 성공적으로 처리되어, 서버에서 새로운 리소스를 생성했음을 알린다.

PUT과 POST 요청에 따른 응답으로 많이 사용된다.

  • 204 No Content

요청은 성공적으로 처리 되었지만, 응답할 데이터가 없을 때 사용한다.

예를 들어, DELETE 요청으로 서버에 데이터가 삭제되었지만, 제공해줄 데이터가 없을 때 204 상태코드를 사용한다.

  • 206 Partial Content

범위가 지정된 GET메소드를 요청 받았을 때, 지정된 범위의 데이터만 보냈음을 알릴 때 사용한다.

3XX : Redirection messages

300번대 상태 코드는 요청이 완료 되기 위해선 추가 동작이 필요함을 알린다.

  • 301 Moved Permanently

요청한 리소스의 URI가 영구적으로 변경되었음을 알린다. 리스폰스 헤더 Location에 변경된 URI를 넣어서 수정된 주소를 알려준다. 브라우저는 이 정보를 받고, 수정된 주소로 재 접속을 한다.

  • 302 Found

301번과 같이 URI 변경되었음을 알린다. 하지만 302는 일시적인 변경일 때 사용한다.

  • 303 See Other

변경된 URI에 다시 접속해야 함을 알리며, 반드시 GET메소드를 사용해야 함을 알릴 때 사용한다.

  • 304 Not modified

요청하는 데이터가 캐시되어 있는 경우를 알린다. 요청된 정보는 수정 사항 없는 캐시 데이터 이기 때문에, 304 메세지와 함께 빈 메세지 바디를 클라이언트에 전송한다.

4XX : Client error responses

400번대 상태 코드는 클라이언트의 요청이 유효하지 않음을 알린다.

  • 400 Bad Request

지정된 방식이 아닌 잘못 된 방식으로 요청했을 때 사용한다.

예를 들어, 로그인 할 때 id만 입력해서 보내는 경우 해당 코드를 보낸다.

  • 401 Unauthorized / 403 Forbidden

두 코드 모두 해당된 리소스에 대한 클라이언트 권한이 없음을 알린다.

401 - 인증이 부족한 경우이다. 로그인이 필요한 경우 사용한다.

403 - 권한이 부족한 경우이다. 로그인은 되었지만, 해당 페이지의 등급이 낮아 접속을 제한할 때 사용한다.

  • 404 Not Found

클라이언트가 요청한 리소스를 찾을 수 없을 때 사용한다. URI를 잘못 입력하거나, 사라진 링크에 접속할 때 쉽게 만날 수 있는 상태코드이다.

5XX : Server error reponses

500번대 상태 코드는 클라이언트가 아닌 서버에 오류가 있을 때 사용한다.

  • 500 Internal Server Error

서버가 처리 과정에서 오류가 있음을 알리는 포괄적으로 사용되는 상태코드이다.

  • 502 Bad Gateway

게이트웨이 또는 프록시서버가 오류가 생겼음을 의미한다.

  • 503 Service Unavailable

서버의 과부하 점검으로 인한 일시적인 서버 사용 불가함을 알릴 때 사용한다.

  • 504 Gateway Timeout

게이트웨이 또는 프록시서버가 정해진 Timeout 시간동안 클라이언트의 요청을 처리하지 못함을 의미한다.


Reference

https://velog.io/@pear/Query-String-쿼리스트링이란

https://velog.io/@wonseok97/request-method-GET과-POST

https://girawhale.tistory.com/66

https://velog.io/@53_eddy_jo/RESTful한-세계에서의-POST와-PUT의-차이-거기에-FETCH까지

https://velog.io/@geeneve/자주-사용하는-HTTP-상태-코드