TIL

9일차 HTTP메소드 및 상태 코드

김영재0412 2022. 4. 27. 13:57

REST

Http Method에 대해서 알기 위해서, 먼저 정의되는 것이 REST 이다.

 

REST의 탄생

  • REST는 Representational State Transfer라는 용어의 약자로서 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 합니다.

REST란?

Representational State Transfer의 약자이며, 다음과 같습니다.

  • 자원(Resource) : HTTP URI
  • 자원에 대한 행위(Verb) : HTTP Method
  • 자원에 대한 행위의 내용(Representations) :  HTTP Message Pay Load

 

HTTP Method

Rest를 지키면서 행위를 전달하는 방법

 

 

Get 

주로 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드이다. 만약에 GET요청이 성공적으로 이루어진다면 XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴한다. 에러가 발생하면 주로 404 (Not found) 에러나 400 (Bad request) 에러가 발생한다.

  • HTTP 명세에 의하면 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다.
  • GET 요청은  멱등성이 있다.
  • 같은 요청을 여러 번 하더라도 변함없이 항상 같은 응답을 받을 수 있다.
  • 데이터를 변경하는 연산에 사용하면 안된다.

 

Post

주로 새로운 리소스를 생성(create)할 때 사용된다. 조금 더 구체적으로 POST는 하위 리소스(부모 리소스의 하위 리소스)들을 생성하는데 사용된다. 성공적으로 creation을 완료하면 201 (Created) HTTP 응답을 반환한다.

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

 

Put

리소스를 수정하기 위해 서버로 데이터를 보내는 데 사용됩니다.

  • PUT 요청은 멱등성이 있다.
  • 동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과가 생성됩니다.

 

Patch

리소스의 일부를 수정하기 위해 서버로 데이터를 보내는 데 사용됩니다.

  • 요청된 자원을 수정하기 위해 사용되는 메소드라는 점에서 Put과 같지만, Put은 전체이고 Patch는 일부분이다.
  • Patch 요청은 설계에 따라 멱등성이 있을수도 없을수도 있다.

 

Delete

지정된 리소스를 삭제합니다.

  • Delete 요청은 멱등성이 있다.
  • 위험한 메소드로 대부분 서버는 비활성화 시킨다.

 

Trace

 원격지 서버에 Loopback 메세지를 호출하기 위해 사용된다.

  • Trace 요청은 멱등성이 있다.

 

HEAD

서버의 각종 정보를 확인하기 위해 사용된다.

  • GET과 동일하지만, response에 Body가 없고 response Code와 Head만 응답받는다.
  • 웹 서버의 다운 여부 점검(Health Check)이나 웹 서버 정보(버전 등)등을 얻기 위해 사용될 수 있다.
  • Head 요청은 역등성이 있다.

 

Option

시스템에서 지원되는 메소드 종류를 확인할 수 있다.

  • Option은 역등성이 있다.

 

CONNECT

웹 서버에 프록시 기능을 요청할 때 사용된다.

  • Connect는 멱등성이 없다.

 

 

메소드 설명 CRUD 멱등성 안정성 Path
Variable
Query
Parameter
Data
Body
GET 리소스 취득 Read O O O O X
POST 리소스 생성/추가 Create X X O O O
PUT 리소스 갱신/생성 Create,
Upate
O X O O O
DELETE 리소스 삭제 Delete O X O O X
HEAD 헤더 데이터 취득 - O O - - -
OPTIONS 지원하는 메소드 취득 - O - - - -
TRACE 요청메세지 반환 - O - - - -
CONNECT 프록시 동작의
터널 접속으로 변경
- X - - - -

    멱등성 : 메소드를 계속 호출해도 결과값이 같은지 안같은지                                     안정성 : 계속해서 메소드를 호출해도 리소스를 변경하지 않는다는 뜻

 

 

 

 

 

HTTP 상태 코드

 

1XX : 정보성 상태 코드

정보성 상태 코드는 HTTP/1.1 에서 도입되어 비교적 새로운 것이며, 복잡함을 감수할 만큼 가치가 있는지에 대해 논란이 되고 있다.

  • 100 : 요청의 시작 부분 일부가 받아들여졌으며, 클라이언트는 나머지를 계속 이어서 보내야 함을 의미함
  • 101 : 요청자가 서버에 프로토콜 전환을 요청했으며, 서버에서 이를 승인하는 중을 의미함

 

2XX  : 성공 상태 코드

클라이언트가 요청을 보내면, 요청은 대게 성공함. 서버는 대응하는 성공을 의미하는 각각의 요청에 대응한다.

  • 200 : 요청은 정상이고, 본문은 요청된 리소스를 포함하고 있다.
  • 201 : 어떠한 생성 작업을 요청받았으며, 생성 작업을 성공하였다.
  • 202 : 요청은 받아들여졌으나, 아직 동작을 수행하지 않은 상태로 요청이 적절함을 의미함
  • 203 : 요청을 성공하였지만, 요청에 대한 검증이 되지 않은 상태를 의미함
  • 204 : 요청을 성공하였지만, 제공할 내용이 없음을 의미
  • 205 : 204와 동일하지만 새로고침등을 통해 새로운 내용등을 확인할것을 추가로 의미
  • 206 : 요청의 일부분만 성공하였음을 의미

 

 

3XX : 리다이렉션 상태 코드

클라이언트에 요청에 대해 적절한 다른 위치를 제공하거나, 대안의 응답을 제공한다.

  • 300 : 클라이언트가 동시에 여러 응답을 가리키는 URL을 요청한 경우 응답 목록과 함께 반환된다.(ex] 어떠한 HTML에 문서에 대한 영문페이지와 불어페이지를 요청)
  • 301 : 요청한 URL이 옮겨졌을 때 사용. 옮겨진 URL에 대한 정보와 함께 응답되어야 한다.
  • 302 : 301과 동일하나, 클라이언트는 여전히 옮겨지기전 URL로 요청할것을 의미
  • 303 : 요청받은 행동 수행을 위해서는 다른 URL로 요청 해야함을 의미
  • 304 : 이전의 동일한 요청과 비교하여 변화가 없음을 의미(단시간에 반복된 동일 요청에 대한 대응 코드)
  • 305 : 직접적인 요청이 아니라 반드시 프락시(우회경로)를 통해 요청되어야 함을 의미
  • 307 : 302와 동일하며, HTTP Method도 변경없이 요청하여야 함을 의미

 

4XX : 클라이언트 에러 상태 코드

클라이언트의 잘못된 요청에 대한 대응 코드

  • 400 : 클라이언트가 올바르지 못한 요청을 보내고 있음을 의미
  • 401 : 요청을 위해서는 권한 인증등을 요구함을 의미
  • 403 : 요청이 서버에 의해 거부 되었음을 의미, 서버는 거부 이유를 포함하여 응답할 수 있지만, 보통은 거부 이유를 숨기고 싶을 때 사용된다.
  • 404 : 요청한 URL을 찾을 수 없음을 의미
  • 405 : 요청한 URL이 Method를 지원하지 않음을 의미(ex] POST요청에 대한 응답을 하는 URL에 GET으로 요청)
  • 406 : 클라이언트 요청에 대해 적절한 컨텐츠가 없음을 의미
  • 407 : 401과 동일하나, 프락시(우회경로)를 통하여 인증 할 것을 요구함을 의미
  • 408 : 요청에 응답하는 시간이 너무 많은 시간이 걸림을 의미(서버는 요청을 끊을수 있음)
  • 409 : 클라이언트 요청에 대해 서버에서 충돌 요소가 발생 할수 있음을 의미
  • 410 : 요청한 URL이 더 이상 사용되지 않고 사라졌음을 의미
  • 411 : 클라이언트 요청에 Content-length 헤더가 포함되어야 함을 의미
  • 412 : 클라이언트가 조건부 요청을 했는데 그중 하나가 실패하였음을 의미
  • 413 : 요청이 너무 커서 서버가 처리 할 수 없음을 의미
  • 414 : 요청 URL이 너무 길어 처리 할 수 없음을 의미
  • 415 : 서버가 이해 하지 못하는 유형의 컨텐츠를 요청 하였음을 의미
  • 416 : 클라이언트의 요청 내용이 범위가 잘못되었음을 의미
  • 417 : 클라이언트 요청 헤더의 Expect에 대해 서버가 만족 하지 않음을 의미

 

5XX : 서버 에러 상태 코드 > 

올바른 클라이언트 요청에 대해 서버의 문제로 응답 할 수 없음을 의미

  • 500 : 서버에 오류가 발생하여 응답 할 수 없음을 의미
  • 501 : 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미(ex] 서버가 지원하지 않는 새로운 Method를 사용하여 요청 - GET2, POST2...)
  • 502 : 프락시나 게이트웨이등의 서버에서 응답하며, 서버의 모(엄마)서버에서 오류가 발생하였음을 의미
  • 503 : 현재 서버가 유지보수 등의 이유로 일시적인 사용 불가함을 의미
  • 504 : 서버에서 다른 서버로 요청을 보냈으나, 응답 지연이 발생하여 처리가 불가함을 의미
  • 505 : 서버가 지원할 수 없거나 올바르지 못한 프로토콜로 요청을 받았음을 의미

 

고양이 사진으로 보는 상태코드 https://http.cat/ 

강아지 사진으로 보는 상태코드  https://httpstatusdogs.com/

 

 

 

 

'TIL' 카테고리의 다른 글

10일차 웹 서비스 개발 기초  (0) 2022.04.28
9일차 Postman  (0) 2022.04.27
9일차 웹서비스 개발 기초  (0) 2022.04.27
8일차 웹서비스 개발 기초  (0) 2022.04.26
7일차 웹서비스 개발 기초  (0) 2022.04.25