본문 바로가기
Programming/WEB

[WEB] HTTP 상태 코드 정리

by 코딩의성지 2021. 4. 6.

예전에 내가 HTTP 프로토콜에 대해 정리해둔 내용이있다.

 

devkingdom.tistory.com/104?category=841890

 

[WEB] HTTP 프로토콜

하이 ~~~ 오늘은 Spring 공부를 하다가 문득 HTTP 프로토콜을 한번 정리해놔야겠다는 생각이 들어서 글을 쓴다. HTTP 프로토콜을 본격적으로 공부해 보기전에 웹 서비스가 무엇인지 간단하게 정리 해

devkingdom.tistory.com

위에 작성된 글처럼 Client 와 Server간 데이터를 주고받기 위해 정해놓은 규약이 Http프로토콜인데, 이렇게 데이터를 주고 받는 과정에서 우리가 잘 주고받았는지, 아니면 뭐 문제가 있는게 아닌지 이런걸 확인할 수 있는게 바로 HTTP 상태코드이다.

 

오늘은 이 http 상태코드에 대해 알아보도록 하자.

 

100번대 코드

100번대 코드는 내가 개발하면서 여태까지 만나본적은 없다...

100번대 코드는 서버가 요청을 받았으니깐 연결되어 있는 클라이언트가 작업을 계속하라는 의미로 사용된다.

 

100 Continue

진행중임을 알려줌 , 현재 진행상태가 문제가없음

 

101 Switching Protocol

클라이언트가 보낸 Upgrade 요청 헤더에 대한 응답에 들어감. 서버에서 프로토콜을 변경할 것임을 알려줌.

Websocket 프로토콜 전환시 사용됨.

 

102 Processing

이 코드는 서버가 요청을 수신해서 처리하고 있는데, 응답을 아직까지 알려줄수 없는걸 의미..

 

 

200번대 코드

200번대 코드는 클라이언트의 요청을 서버가 성공적으로 처리했다는 것을 의미한다.

 

200 OK

요청한 작업이 단순하게 성공한 것을 의미함. 

 

201 Created 

요청이 정상적으로 수행되었다는 것을 의미하며, 이를 통해서 리소스가 새로 생성되었다는 것을 의미한다.

이 응답은 대부분 POST 요청에서 혹은 일부 PUT 요청 이후에 전달되는 상태값이다.

 

202 Accepted

요청을 수신은 했지만 그에 대한 액션을 할수 없을 때, 다른 프로세스에서 처리되거나 다른 서버가 요청을 다루거나 배치프로세스를 하고 있는 경우

 

203 Non-Authoritative Information

보통은 200응답이 우선됨

의미만 알아두자면 이 응답코드는 리턴받은 메타정보 셋이 오리진 서버랑 일치하진 않지만, 로컬이나 서드파티 복사본에서 모아진 경우를 의미. 어렵게 생각하지 말고 잘 처리되긴했는데 안에서 뭔가 ~~ 됐구나 생각하면 될듯

 

204 No Content

요청은 정상적으로 수행되었지만 요청에 대해서 보내줄 컨텐츠가 없고, 헤드에 의미있는 값이 있을수는 있음.

보통 PUT 요청에 대한 응답으로, 사용자에게 보여지는 페이지를 바꾸지 않고 리소스를 업데이트할 때 쓴다.

리소스를 생성할땐 201, 새롭게 업데이트한 페이지를 보여줘야하면 200, 업데이트된 되지만 페이지를 바꾸지 않고 리소스가 업데이트 될때는 204라고 생각하면 되겠다.

 

205 Reset Content

이응답 코드의 경우 요청을 처리하고 나면 사용자 에이전트에게 요청을 보낸 문서 뷰를 리셋하라 알림

 

206 Partial Content

이 응답코드의 경우 클라이언트에서 복수 스트림을 분할로 다운로드할 때 ,Range 헤더를 전송하면서 사용된다.

예를들어서 다운로드하다가 , 클라이언트가 이어받기를 시도하면 웹서버가 이에 대한 응답코드로 206을 던진다. 그리고 그에대한 Range Header를 읽어서 받았던 부분 다음을 이어받는다.

 

207 Multi-Status

207 응답코드는 여러 리소스가 여러 응답인 상태에서 적절한 정보를 사용자한테 제공할 수 있도록 하는 응답코드임. WebDAV (Distributed Authoring and Versioning) 전용

 

208 Already Reported 

propstat( property + status ) 응답 속성으로 동일 컬렉션을 통해서 바인드되는 복수의 내부 멤버를 반복해서 열거하는걸 피하기 위해 사용함. 이걸 사용하면 DAV 바인딩 멤버는 이미 응답의 앞부분에 열거되어 있고 다시 포함되지 않음, WebDAV 전용

 

226 IM Used (HTTP Delta encoding)

서버가 GET 요청에 대한 리소스 처리를 다했고, 그에 대한 응답이 하나 혹은 그 이상의 인스턴스 조작이 현재 인스턴스에 적용됨을 의미

 

300번대 코드

300 번대 코드의 경우 리다이렉션과 관련이 있음. 리다이렉션은 간단하게 말하면 어떤리소스가 옮겨지거나해서 찾아갔던 그 곳에 리소스가 없을때 서버가 니가 찾는거 거기있어 ! 하면서 알려주는걸 말함.

 

300 Multiple Choice

요청에 대하여 하나이 상의 여러개의 응답이 있음을 알릴때 사용한다고 하지만 ... 응답을 선택하는 방법이 표준화 되지않아 사용하진 않음

 

301 Moved Permanently 

뜻만 해석해보면 컨텐츠가 영구적으로 이동했을때 사용하는 거다. 즉 요청한 리소싀의 URI가 영구적으로 바꼈다는 말이다.

무슨 의미냐면, 브라우저는 자신에 대한 요청의 응답으로 301을 받으면 HTTP 헤더가 들어있는 Location 필드를 찾아본 뒤에 , 그 필드에 담긴 URL로 자동으로 리다이렉션하여 컨텐츠를 찾는다. 보통 이럴때 많이쓴다. HTTPS(443) 로 접근해야하는데 HTTP (80)으로 접근하는 경우, https로 갈수 있도록 리다이렉션 한다

 

302 Found

301이 영구적으로 이동한거라면 302는 일시적으로 컨텐츠가 이동했을때 사용하는 것이다. 다시말해서 리소스의 url가 일시적으로 변경되었음을 말한다.

 

303 See Ohter 

서버가 사용자의 GET 요청을 처리해서 다른 URL에서 요청된 정보를 가져올수 있도록 하는 응답 코드

클라이언트가 만약 요청한 리소스

 

304 Not Modified

200 만큼이나 많이 볼수 있는 HTTP 코드다.. 이 코드는 캐싱을 목적으로 사용된다. 이걸 통해서 클라이언트에게 응답이 수정되지 않았음을 알려주게 되고, 클라이언트는 그냥 응답의 캐시된 버전을 사용한다.

 

305 User Proxy

프록시를 사용해야 컨텐츠에 접근 가능함. 

요즘 보안상으로 잘 사용하지는 않음. (실제로 Deprecated) 됨

 

306 unused

이 응답코드는 사용되지 않는다

 

307 Temporary Redirect

302 처럼 일시적인 컨텐츠 이동을 나타낼때 사용 , Http 메서드 변경을 허용하지 않음 ( 첫번째 요청이 GET이라면 두번째 요청도 GET 이어야함)

 

308 Permanent Redirect

301 처럼 영구적인 컨텐츠 이동을 나타낼때 사용, 역시 Http 메서드 변경을 허용하지 않음

 

400번대 코드

400번대 코드의 경우 클라이언트에서 서버로 보낸 요청이 잘못된 경우를 의미한다. 보통은 프론트엔드 개발자가 실수해서 나오는 에러일 경우가 많다..

 

400 Bad Request

이건 말그대로 클라이언트가 요청을 잘못 날린걸 뜻한다. 보통은 http 응답 Body에 뭘 잘못 날렸는지 알려주긴 하는데, 간혹.... 서버로그를 까봐야하는 절망적인 경우도 발생한다.

 

401 Unauthorized

인증이 필요한 서비스인데, 인증이 되지 않은 경우.

보통 로그인 상태여야 사용할 수 있는 서비스를 로그인 안된 사용자가 쓸려고 할때 던지는 코드

 

402 Payment Required

아직 사용되고 있지 않은 코드 ( 나중에 사용될거 대비해서 예약)

 

403 Forbidden

인가가 필요한 서비스인데 인가가 되지 않은 클라이언트가 컨텐츠에 접근하려할때 던짐.

401 이랑 헷갈릴 수 있는데, 403 은 넌 이 컨텐츠 못써 임마!!! 이런 느낌이라면

401은 야 너 누구냐? 누군지 밝히면 쓰게해줄게 이런느낌이다. 

 

404 Not Found

서버가 요청한 페이지를 찾을수 없다. 즉 존재하지 않은 페이지를 요청할때 이 코드를 던진다. api url 을 실수로 틀리게 날려서 발생하는 경우가 많다.

 

405 Method Not Allowed

현재 리소스에 맞지 않는 메서드를 사용한 경우 발생한다. 예를 들어서 내가 회원가입 API를 POST 요청으로 만들어놨는데 , GET 요청으로 던지면 이 코드를 볼 수 있다.

 

406 Not Acceptable

요청한 페이지가 컨텐츠의 특성으로 응답할 수 없을때 나오는 코드.

이응답은 서버 주도 컨텐츠 협상을 수행한 뒤, 그에 대한 알맞은 컨텐츠 타입이 없다는 걸 의미한다.

서버 주도 컨텐츠 협상이라는 건  우리가 보통 어떤 요청을할때 Http 헤더의 Accept 필드에다가 어떤 컨텐츠 타입의 리소스를 원하는지 명시해서 요청을하는데 ( 만약 안 정의 해주면 text/xml을 비롯하여 몇가지 타입을 더 스스로 헤더에 담아서 보내준다) 이 요청을 받은 서버는 이런 컨텐츠 타입에 맞는 리소스가 있는지 하나하나 확인하고, 이후 알맞은 컨텐츠 타입이 있으면 Http 응답 헤더에 Content-Type 필드에 해당 컨텐츠 타입을 넣어서 응답해주게 된다.

이 과정은 전적으로 서버가 하는거고 이걸 바로 서버 주도 컨텐츠 협상이라고한다. 그런데 이 과정을 거치고도.. 응답해줄게 없다? 그럼 406 을 던진다.

 

407 Proxy Authentication Required

401 비슷한데 프록시에 의한 인증이 필요하다. 

 

408 Request Timeout

서버랑 클라이언트가 연결되어 있는 상태에서... 서버가 아무리 기다려도... 클라이언트가 보냈던 요청 본문을 받지 못하는 경우를 의미한다. 일부 서버는 이 메시지를 보내지 않고 그냥 연결을 끊어버리기도 한다..

 

409 Conflict

서버가 요청을 수행하던 중 충돌한 경우 보내지는 코드다.

 

410 Gone

요청한 콘텐츠가 서버에서 영구적으로 삭제되어버려서... 리다이렉트 될 주소도 존재하지 않을때 이 응답 코드를 던ㄴ진다. 404 코드와 비슷한데 더 이상 존재하지 않는 리소스에 대해선 404 대신에 이 410을 던지기도 한다. 만약에 영구적으로 옮겨진거라면 301을 단져서 리소스의 새 위치를 지정해주자.

 

411 Length Required

클라이언트가 헤더에 Content-Length를 포함해줘야 서버가 처리할 수 있고 포함되지 않을 경우에 이 응답코드를 던진다.

 

412 Precondition Failed

클라이언트가 요청할때 보낸 전제조건이 서버의 전제조건과 맞지 않을때 보냄

 

413  Payload Tool Large

요청한 내용이 너무 커서 서버가 그걸 처리하지 못할때 던지는 코드

 

414 URI Too Long

URI 가 너무 길어서 서버가 처리할 수 없을때 던지는 코드

 

415 Unsupported Media Type

요청한 미디어 포맷이 서버에서 지원하지 않을때 던지는 코드

 

416 Requested Range Not Satisfiable

Range 헤더 필드에 요청한 지정 범위를 만족시킬 수 없을 경우에 던지는 코드

 

417 Expectation Failed

요청한 헤더의 Expect 필드에 담긴 요구사항을 서버가 만족하지 못할때 던지는 코드

 

418 I'm a teapot

?? ( 만우절 농담이라고 하던데 ..)

 

421 Misdirected Request

서버로 유도된 요청은 응답을 생성할 수 없음을 의미? 

 

422 Unprocessable Entity (WebDAV)

요청이 잘만들어졌지만 .. .문법 오류로 인해 처리될수가 없을때 던지는 코드

 

423 Locked (WebDAV)

접근하려는 리소스가 잠겨 있음

 

424 Failed Dependency (WebDAV)

이전요청이 실패해서 지금 요청도 실패하였다라고 알려줄때 

 

426 Upgrade Required

서버는 지금의 프로토콜을 사용하여 처리하는건 거절했지만 니가 다른프로토콜로 업그레이드해서 던지면 처리해줄수도 있어 ~~ 하면서 필요로 하는 프로토콜을 알려주기 위해 426 응답을 보냄

 

428 Precondition Required

어떠한 요청의 트랜잭션이 깨지는걸 방지? 하려고 던지는 코드

예를들면 클라이언트가 Get 해온 리소스를 PUT으로 업데이트하려고하는데 다른 서드파티가 서버의 상태를 수정하면 그업데이트가 일어나지 않을수 있으니깐 그걸 방지하기 위해? 응답하는 코드라 보면될듯.

 

429 Too Many Requests

클라이언트가 서버에 너무 많은 요청을 보낼때 발생. 

 

431 Request Header Fields Too Large

요청한 헤더 필드가 너무 클때 던지는 응답 코드

 

451 Unavailable For Legal Reasons

정부 검열 ( 불법 도박 , 불법 야x 사이트 같은거..)

 

500번대 코드

500 번대 코드는 서버쪽에서 문제가 생겼을 경우에 던지는 코드이다..

 

500 Internal Server Error 

서버에 문제가 있는데 더는 설명 못해 .. .이런 의미인데

이건 백엔드 어플리케이션 내부에서 에러가 발생해서... 던지는 상태값인데..

아무튼 에러의 원인을 구체적으로 클라이언트에게 알려주면 안되니깐 이렇게 간단하게 알려준다..

(이코드만나면 이런말이 나온다 .. 야 서버로그 까~!)

 

501 Not Implemented

서버가 요청을 수행할수 있는 기능이 없을때

 

502 Bad Gateway

서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 잘못된 응답을 받았을때..

간단하게 말하면 백엔드는 보통 바로 클라이언트를 통해서 데이터를 받지않고  프록시 서버나 게이트웨이를 통해서 요청을 받고 응답을 보내주는데, 얘네가 백엔드가 죽거나해서 응답을 못받을 경우에 이런 코드를 던진다.

 

503 Service Unavailable

서버가 요청을 처리할 준비가 되지 않았을 때, 일반적으로 유지보수를 위해 서버를 잠시 멈췄거나.. 아니면 서버가 과부하가 걸려 죽었거나 했을때 이 응답이 떨어진다.

 

504 Gateway Timeout 

서버가 게이트웨이역할을 할때 웹페이지를 로드하거나 브라우저에서 다른 요청을 채우려하는동안 서버가 일시적으로 응답을 못받는 경우... 일반적으로 네트워크 오류일때가 많은데... 실제 서버의 문제일 수도 있다

 

예를들면 게이트웨어 - 백엔드 어플 1 - 백엔드 어플 2 이렇게 통신이 된다 치면 

백엔드 어플 1에서 2에 요청을 보내서 응답을 기다리는 상황인데 어플 2가 고장나서 뭣도 안되는 상황이면 게이트웨이 역할을 한는 애는 클라이언트에게 이 504 를 던지게 되는 것이다.

 

505 Http Version Not Supported

서버에서 지원되지 않는 Http 버전을 클라이언트가 요청하였을 경우 ..

 

506 Variant Also Negotiates

서버에 내부구성 오류가 있는 경우 발생

 

507 Insufficient Storage

용량 부족 ..

 

508 Loop Detected (WebDAV)

요청 처리중 무한루프를 감지했을때

 

509 Bandwidth Error

대역폭 제한 초과한 경우

 

510 Not Extended

서버가 요청을 처리할려면 요청에 대한 추가확장이 필요할때

 

511 Network Authentication Required

클라이언트가 네트워크 액세스를 얻기 위해 인증할 필요가 있을때..

 

끝...

반응형

댓글