Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

To Dare Is To Do!

HTTP Status Code / Method 본문

Spring

HTTP Status Code / Method

Nick_Choi 2024. 7. 2. 16:09

HTTP ( HyperText Transfer Protocol )란?

웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 텍스트 기반의 통신 규약으로  프로토콜을 의미한다.

클라이언트와 서버 간의 통신을 관리하고 웹 페이지, 이미지, 동영상, 문서 등의 리소스를 전송하고 검색할 때 사용된다.

※ 리소스란 URL를 검색해서 받아온 결과로서 텍스트, HTML, 이미지 등 그 외 서버로부터 전달받은 데이터를 의미한다.

Ex) 

웹 브라우저의 주소창에 https://www.naver.com을 입력 후 Enter

-> 웹 클라이언트와 웹 서버 사이에 HTTP 연결이 맺어지며 웹 클라이언트는 HTTP 요청 메시지를 웹 서버에게 보냄.

-> 웹 서버는 요청에 따른 처리 결과를 웹 클라이언트에게 HTTP 응답 메시지로 보냄

-> 클라이언트는 서버에서 보낸 응답 메시지의 상태 라인에 있는 상태 코드(status code)를 보고 요청에 대한 결과 확인

 

HTTP Status Code ( HTTP 응답 상태 코드)

특정 HTTP 요청 결과에 대한 여부를 나타내는 코드로 5가지의 그룹으로 분리된다.

  • Informational responses (100 ~ 199)
    : 정보 제공 - 임시 응답으로서 현재 서버가 클라이언트의 요청 받았으니 클라이언트는 작업을 계속 진행할 것을 알림
  • Successful responses(200 ~ 299)
    : 성공 응답 - 클라이언트의 요청이 서버에서 성공적으로 처리되었음을 알림
  • Redirection messages(300 ~ 399)
    : 리다이렉션 - 완전한 처리를 위해 추가 동작이 요구됨 ( 주로 서버의 주소 혹은 요청한 URI의 웹 문서가 이동되었으니 다시 본래 주소로 돌아갈 것을 의미)
  • Client error responses(400 ~ 499)
    : 클라이언트 오류 - 없는 페이지를 요청하는 등 클라이언트 측에서 보낸 요청 메시지에 오류가 있는 것을 의미
  • Server error responses(500 ~ 599)
    : 서버 오류 - 서버의 문제로 메시지 처리에 실패한 경우를 의미

1XX : Informational responses

- 100 : Continue : 계속

계속 진행할 것. 현재까지 진행에 문제가 없기 때문에 클라이언트는 계속해서 요청을 보내거나 요청이 완료되었을 경우 무시해도 됨

- 101 : Switching Protocol : 프로토콜 전환

클라이언트에 의해 보내진 업그레이드 요청 해더에 대한 응답으로 서버에서 프로토콜을 변경할 것임을 알림

- 102 : Processing : 처리중

서버가 클라이언트로부터 요청을 수신하였고 이를 처리하고 있으나 오랜 시간이 걸릴 것으로 예상되어 클라이언트에서 타임 아웃이 발생하지 않도록 해당 응답코드를 보냄

- 103 : Early Hints : 초기 힌트

서버가 응답을 준비하는 동안 보낼 수 있는 코드로 서버가 최종 응답이 연결할 것으로 예상되는 사이트 및 리소스에 대한 힌트를 제공함으로써 클라이언트가 최종 응답을 받기 전에 미리 사이트에 연결하거나 리소스를 로드할 수 있게 함

- 104 ~ 199 : Unassigned : 현재 할당되지 않은 상태 코드

 

2xx : Success

- 200 : OK : 성공

서버가 요청을 성공적으로 처리함

- 201 : Created : 생성

요청이 처리되어 새로운 리소스가 생성 (보통 POST, PUT 요청 이후에 따라옴)

- 202 : Accepted : 허용됨

요청은 접수하였지만 아직 처리가 완료되지 않음

- 203 : Non-Authoritative Information : 신뢰할 수 없는 정보

응답 헤더가 오리지널 서버로부터 제공된 것이 아님을 알림

- 204 : No Content : 컨텐츠 없음

처리를 성공하였으나 클라이언트에게 돌려줄 컨텐츠가 없음 (보통 DELETE 요청에 대한 응답)

- 205 : Reset Content : 컨텐츠 재설정

서버가 요청을 성공적으로 완료했으니 클라이언트측에서 화면을 새로고침 할 것을 알림 (ex. 페이지의 양식을 사용할 때 사용자가 양식을 제출하면 클라이언트가 추가적으로 작업을 수행할 수 있도록 원래 상태로 되돌아감)

- 206 : Partial Content : 일부 컨텐츠

컨텐츠의 일부만 보냄 ( 응답 헤더의 Content-Range에 응답 컨텐츠의 범위를 기록)

- 207 : Multi-Status : 다중 상태

요청에 대한 처리의 결과가 여러 상태를 가짐 (성공을 의미하지만 각각의 처리 결과가 성공인지는 body를 봐야 알 수 있음)

- 208 : Already Reported : 이미 보고됨

동일한 컬렉션에 대한 여러 바인딩의 내부 멤버를 반복적으로 열거하는 것을 피하기 위해 응답 요소 내부에서 사용

- 209 ~ 225 : Unassigned

- 226 : IM Used : IM(Instance Manipulations) 사용

서버는 GET리소스에 대한 요청을 이행했으며, 응답은 현재 인스턴스에 적용된 하나 이상의 인스턴스 조작의 결과를 나타냄

- 227 ~ 299 : Unassigned  

 

3XX : Redirection

300 : Multiple Choices : 여러 선택항목

선택 항목이 여러 개 있음, 지정한 URI에 대해서 콘텐츠 협상을 수행한 결과 서버에서 콘텐츠를 결정하지 못하고 클라이언트에게 복수 개의 링크를 응답

301 : Moved Permanetly : 영구 이동

지정한 리소스가 새로운 URI로 이동

302 : Found : 다른 위치 찾음

요청한 리소스를 다른 URI에서 찾음, 요청한 URI가 없으므로 클라이언트 메소드를 그대로 유지한 채 응답 헤더 Location에 표시된 다른 URI로 요청을 재송신할 필요가 있음 ( 302의 의미를 개선하여 307로 정의, 302의 응답 코드 사용 권장 x)

303 : See Other : 다른 위치 보기

다른 위치로 요청할 것, 요청에 대한 처리 결과를 응답 헤더 Location에 표시된 URI에서 GET으로 취득할 수 있음

ex) 브라우저 폼 요청을 POST로 처리한 후 결과 화면으로 리다이렉트할 때 사용

304 : Not Modified : 수정되지 않음

마지막 요청 이후 요청한 페이지가 수정되지 않음을 알림

305 : Use Proxy : 프록시 사용

지정한 리소스에 액세스하려면 프록시를 통해야 함을 알림

306 : Unsued

307 : Temporary Redirect : 임시 리다이렉션

임시로 리다이렉션 요청이 필요함을 알림, 요청한 URI가 없으므로 클라이언트 메소드를 그대로 유지한 채 응답 헤더 Location에 표시된 다른 URI로 요청을 재송신할 필요가 있음

308 : Permanent Redirect : 영구 리다이렉션

리소스가 응답 헤더 Location에서 지정한 다른 URI에 영구적으로 위치한다는 것을 의미

309 ~ 399 : Unassigned

4XX : Client Error

400 : Bad Request 잘못된 요청

요청의 구문이 잘못됨

401 Unauthorized 권한 없음

지정한 리소스에 대한 액세스 권한이 없음

402 Payment Required 결제 필요

지정한 리소스를 액세스하기 위해 결제가 필요함 (실제로 사용 x)

403 Forbidden 금지됨

지정한 리소스에 대한 액세스가 금지됨 (리소스 존재를 은폐하고 싶으면 404 코드 사용 가능)

404 Not Found 찾을 수 없음

지정한 리소스를 찾을 수 없음

405 Method Not Allowed 허용되지 않은 메소드

요청한 URI가 지정한 메소드를 지원하지 않음

406 Not Acceptable 수용할 수 없음

클라이언트가 Accept-*헤더에 지정한 항목을 처리할 수 없음

407 Proxy Authentication Required 프록시 인증 필요

클라이언트는 프록시 서버에 인증이 필요함

408 Request Timeout 요청 시간초과

요청을 기다리다 서버에서 타임아웃됨

409 Conflict 충돌

서버가 요청을 수행하는 도중 충돌이 발생함

410 Gone 사라짐

지정한 리소스가 이전에는 존재하였으나 현재는 존재x (ex. 기간 한전 프로모션 사이트가 사라진 경우)

411 Length Required 길이 필요

요청 헤더에 Content-Length를 지정해야 함

412 Precondition Failed 사전 조건 실패

If-match와 같은 조건부 요청에서 지정한 사전 조건이 서버와 맞지 않음

413 Request Entity Too Large 요청 객체가 너무 큼

요청 메시지가 너무 큼 (서버에서 접속을 끊음)

414 Request-URI Too Large 요청 URI가 너무 긺

요청 URI가 너무 긺

415 Unsupported Media Type 지원되지 않는 미디어 유형

클라이언트가 지정한 미디어 타입을 서버가 지원하지 않음 (ex. 서버가 지원하는 이미지 타입이 JPG일 때 GIF로 요청될 경우)

416 Range Not Satisfiable 처리할 수 없는 요청 범위

클라이언트가 지정한 리소스의 범위가 서버의 리소스 사이즈와 맞지 않음

417 Expectation Failed 예상 실패

클라이언트가 지정한 Except 헤더를 서버거 이해하지 못함

418 ~ 421 Unassigned

422 Unprocessable Entity 처리할 수 없는 엔티티

클라이언트가 송신함 XML이 구문은 맞으나 의미상 오류가 존재

423 Locked 잠김

지정한 리소스가 잠겨있음

424 Failed Dependency 의존 관계로 실패

다른 작업의 실패때문에 본 요청도 실패함

426 Upgraded Required 업그레이드 필요함

클라이언트의 프로토콜이 업그레이드가 요구됨

428 Precondition Required 사전 조건 필요함

다른 작업의 실패때문에 본 요청도 실패함

429 Too Many Requests 너무 많은 요청

클라이언트가 주어진 시간 동안 너무 많은 요청을 보냄

431 Request Header Fields Too Large 너무 큰 헤더

헤더의 길이가 너무 큼

444 Connection Closed Without Response 응답 없이 연결 닫음

(NGINX) 응답을 보내지 않고 연결을 종료

451 Unavailable For Legal Reasons 법적 사유로 불가

법적으로 문제가 있는 리소스를 요청

452 ~ 499 Unassigned

 

5XX : Server Error

500 Internal Server Error 내부 서버 오류

서버에 에러가 발생

501 Not Implemented 구현되지 않음

청한 URI의 메소드에 대해 서버가 구현하고 있지 않음

502 Bad Gateway 불량 게이트웨이 

게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 받았다.

503 Service Unavailable 서비스 제공불가 

현재 서버에서 서비스를 제공할 수 없음 (보통은 서버의 과부하나 서비스 점검 등 일시적인 상태)

504 Gateway Timeout 게이트웨이 시간초과

게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 응답을 기다리다 타임아웃이 발생

505 HTTP Version Not Supported HTTP 버전 미지원

클라이언트가 요청에 사용한 HTTP 버전을 서버가 지원하지 않음

506 Unassigned

507 Insufficient Storage 용량 부족

서버에 저장 공간 부족으로 처리에 실패

512 ~ 599 Unassigned

 

HTTP 메서드

- HTTP 메서드란 클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식

  = 서버에 주어진 리소스에 수행하길 원하는 행동, 서버가 수행해야 할 동작을 지정하는 요청을 보내는 방법

- HTTP 동사라고 부르기도 함

- 클라이언트가 서버에게 요청의 목적이나 종류를 알리는 수단으로서 사용됨

- URI 설계 과정에서 적당한 리소스명을 작성할 때 발생하는 URI 중복 문제를 해결

 

주로 쓰이는 메서드 GET, POST, PUT, PATCH, DELETE 외에도 HEAD, OPTIONS, TRACE 등이 있다.

 

주요 메서드

GET 

  • 클라이언트가 서버의 리소스 요청(조회)할 때 주로 사용
  • URL에 전송하는 데이터가 표시되기 때문에 보안에 민감한 정보 사용은 유의해야 함
  • 쿼리스트링을 사용하여 서버에 데이터를 전달함

※쿼리스트링이란 사용자가 입력데이터를 전달하는 방벌 중 하나로서 url 주소에 미리 협의된 데이터를 파라미터를 통해 넘기는 것이다.

EX) https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=손흥민

위의 url에서 ? 이후에 오는 내용으로 key=value의 형태를 가지고  &로 연결된다.

 

POST

  • 요청 데이터 처리함
  • 메시지 바디를 통해 서버로 요청 데이터 전달함
  • 주로 새로운 리소스를 생성(등록)할 때 사용함
  • 쿼리스트링 형태의 데이터를 메시지 바디(ex. json)에 넣어 전달하기 때문에 GET 방식처럼 데이터가 외부에 노출되는 것을 방지함

PUT 

  • 해당 리소스가 있다면 덮어쓰고 해당 리소스가 없으면 생성 (UPDATE 개념)
  • 일부 필드가 없는 리소스로 PUT 한다면 기존에 있던 일부 필드는 삭제될 수 있음
  • 부분 수정 불가능
  • 클라이언트가 구체적인 리소스의 경로를 지정해야 함

PATCH

  • 리소스의 일부분을 수정한다는 점에서 PUT과 차이를 가짐 (UPDATE 개념)

DELETE

  • 리소스를 삭제하는 역할을 가짐

HEAD

  • GET과 비슷하지만 HTTP 메시지의 Body 부분은 없고 헤더만 존재함
  • 주로 리소스의 메타데이터를 검색하거나 리소스가 변경되었는지 확인할 때 사용함

OPTIONS

  • 서버가 클라이언트에게 메서드, 헤더, 인증 방법 등의 정보를 제공하는 메서드

TRACE

  • 클라이언트와 서버 사이에 요청과 응답 메시지가 어떻게 수정되는지 확인할 수 있음
  • 일종의 검사용 메서드

 

 

 

 

 

 

 

 

 


참고

https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%A2%85%EB%A5%98-%ED%86%B5%EC%8B%A0-%EA%B3%BC%EC%A0%95-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC#http_%EB%A9%94%EC%84%9C%EB%93%9C_-_trace

'Spring' 카테고리의 다른 글

Spring AOP  (0) 2025.05.07
객체 지향 설계의 5가지 원칙(SOLID)  (1) 2023.12.23
DTO와 Entity의 변환  (0) 2023.11.16
DTO vs VO vs Entity  (0) 2023.11.07
Spring 3계층 속 DI  (0) 2023.11.05