치춘짱베리굿나이스

HTTP 응답 코드 종류 본문

이론적인 부분들/웹

HTTP 응답 코드 종류

치춘 2022. 8. 4. 16:54

HTTP 응답 코드

약간 치트시트 느낌으로 만들어보는 응답 코드 포스팅이다

1XX

요청을 잘 받았고, 요청에 따른 처리를 진행중이라는 의미이다

사용 빈도는 드물지만 가끔 웹소켓 등에서 사용한다

100 Continue

요청에 문제가 없으니 다음 요청을 이어서 보내도 된다는 의미이다

클라이언트에서 더이상 작업할 게 없는 경우, 보통 이 응답은 무시한다

101 Switching Protocols

클라이언트가 요청한 대로 프로토콜을 바꿀 것이라는 의미이다

웹소켓에서 많이 사용한다고 한다

103 Early Hints

서버가 아직 처리를 진행중이긴 하지만, 클라이언트가 미리 자원을 읽을 수 있도록 맛보기를 제공한다

2XX

성공! 요청이 잘 들어왔고, 서버에서 이 요청을 이해했으며 제한 없이 수용될 수 있음을 의미한다

제일 유명한 200이나 204, 206을 제외하고는 잘 볼 일이 없다

200 OK ⭐️

서버에 요청을 보내다 보면 가장 많이 만날 수 있는 응답 코드이다

너 데이터 잘 읽었고, 처리도 완료되었으니 그에 대한 정보를 응답으로 보낼게~ 라는 뜻이 내포되어 있다

  • GET: 요청한 자원이 메시지의 본문에 함께 첨부된다
  • POST: 요청과 함께 첨부된 자원이 요청대로 서버상에 잘 처리되었다

201 Created

요청 잘 들어왔고, 그에 따른 결과가 잘 생성되었음을 알린다

대개 POST 요청에 대한 응답으로 들어온다

202 Accepted

요청 잘 접수됐는데, 처리 예정이거나 처리중이라는 것을 의미한다

처리중인 요청이 실패할 가능성도 있기 때문에, 아직 완벽하게 OK라고 볼 순 없다

203 Non-Authoritative Information

요청은 잘 접수됐지만 같이 보내진 정보가 서버의 원본과는 동일하지 않음을 의미한다

해당 정보는 일단 서버에 수집된다

204 No Content

요청 잘 접수됐고, 처리도 끝났지만 너한테 보내줄 정보는 없다는 의미이다

대개 PUT, DELETE 등의 자원 업데이트 요청은 반환할 응답 정보가 딱히 없기 때문에 이 코드가 반환된다

POST는 자원 업데이트가 아닌 생성이기 때문에 201이 반환되는 것이다

205 Reset Content

204와 마찬가지로 요청이 잘 접수되었고 처리도 끝났지만 마찬가지로 너에게 보여줄 정보는 없음을 의미한다

204와 달리 205는 클라이언트에서의 문서 뷰가 새로고침될 필요성이 있다고 알려주는 코드이다

206 Partial Content

요청이 잘 접수되었지만, 응답으로는 처리된 데이터 중 일부만 보낸다는 의미이다

컨텐츠 다운로드 등 데이터의 일부만 제공할 때 사용되는 코드이다

3XX

리디렉션이 필요함을 의미한다

300 Multiple Choices

요청은 접수되었지만, 그에 따른 가능한 응답의 종류가 여러 개이기 때문에 클라이언트 측에서 골라야 한다는 의미이다

응답을 고르는 방법이 비표준화되어 사용되지 않는 코드이다

301 Moved Permanently

요청한 리소스가 영구적으로 다른 URL로 이동되었으니, 다른 곳으로 요청하라는 의미이다

브라우저는 보통 이 응답을 받았을 때 헤더에 같이 첨부된 URL로 리디렉션을 하여 원하는 자원을 받아온다

또한 검색 엔진이 이 응답을 받았을 경우, 링크를 교체한다

302 Found

요청한 리소스가 일시적으로 다른 URL로 이동되었다는 의미이다

일시적인 이동이므로, 검색 엔진은 링크를 교체하지 않는다

마찬가지로 브라우저는 사용자를 헤더에 첨부된 URL로 리디렉션하여 원하는 리소스를 받아온다

303 See Other

다른 URL에서 너가 원하는 자원을 찾을 수 있을 것 같아! 라는 의미이다

304 Not Modified

요청한 자원을 재전송할 필요가 없음을 나타낸다

이미 캐시가 되어있으니, 내가 너한테 한번 더 보낼 필요는 없는 것 같아! 라는 뜻이다

307 Temporary Redirect

요청한 자원이 헤더에 제공된 URL로 임시적으로 옮겨졌다는 것을 의미한다

302와 다른 점은 302는 교체된 URL에서 정보를 받아오기 위해 메서드나 요청 본문을 변형해야 할 가능성이 있지만, 307은 지금 들어온 요청 형식 그대로 사용해야 한다는 점이다

308 Permanent Redirect

요청한 자원이 헤더에 제공된 URL로 영구적으로 옮겨졌다는 것을 의미한다

301과 다른 점은 307과 마찬가지로 308은 메서드와 요청 본문을 변형하지 않도록 한다

4XX

오류가 발생했다! 4로 시작하는 코드들은 클라이언트의 요청에 문제가 있음을 알려준다

받아보면 기분이 영 좋지 않다

400 Bad Request ⭐️

요청이 단단히 잘못되었다! 이건 서버에서 처리할 수 없다

요청 구문이 형식에 맞지 않거나, 프레이밍이 유효하지 않은 등의 이유로 서버에서는 요청을 처리하지 않겠다고 말한다

401 Unauthorized ⭐️

요청은 받았지만, 너한테는 그 요청에 대한 응답을 받을 권한이 없어! 라고 말하는 코드이다

이 코드는 WWW-Authenticate 헤더와 함께 전송되며, 헤더를 열어보면 올바른 인증 자격 증명을 받는 방법을 알려준다

402 Payment Required

이 요청에 대한 응답을 받고 싶다면 돈을 내라는 뜻이지만, 대부분의 경우에선 그냥 403을 사용한다

403 Forbidden ⭐️

서버가 요청을 거부했다!

관리자가 해당 사용자를 차단했거나, 사용자에게 권한이 없을 때 표시된다

401과 다르게 인증 자격 증명을 받을 방법이 없다 (재인증을 거쳐도 계속 403을 반환한다)

404 Not Found ⭐️

요청한 자원이 서버에 없다는 것을 의미한다

대개 주소에 오타가 났을 때 해당 주소를 찾을 수 없어 종종 표시된다

자원이 일시적, 또는 영구적으로 사라진 것 (있다 없어진 것) 이 아니라, 아예 없었다는 뜻이다

오타가 나진 않았는지 확인해 보자

405 Method Not Allowed

요청으로 들어온 메서드가 사용불가능하다는 의미이다

참고로 GETHEAD 메서드는 어떠한 서버에서도 필수로 사용가능해야 하므로, 405 코드를 반환받을 수 없다

406 Not Acceptable

요청은 정상이지만, 서버에서 현재 받아들일 수 없는 요청이라는 의미이다

방화벽 등에 막히면 발생한다

407 Proxy Authentication Required

프록시 인증이 필요하다

408 Request Timeout ⭐️

서버가 해당 연결은 더이상 사용하지 않는 연결이라고 판단하고 끊어버렸다는 의미이다

요청 중에 시간이 너무 지체되어 서버가 연결 종료라고 판단하였을 때 이 코드가 반환된다

409 Conflict

서버의 현재 상태와 클라이언트에서 보낸 요청이 충돌했음을 나타낸다

대개 PUT 메서드를 이용하여 자원을 업데이트할 때, 깃 충돌마냥 자원의 변경점 등이 충돌하면 발생한다

410 Gone

404는 자원이 처음부터 존재하지 않았음을 뜻하지만, 410은 자원이 영구적으로 사라졌다는 뜻이다

411 Length Required

요청을 보낼 때 자원의 길이를 요청하지 않았다는 뜻이다

자원의 길이를 명시해서 다시 보내달라는 뜻이다

412 Precondition Failed

목적 자원 접근에 실패했다

서버의 전제조건과 클라이언트의 전제조건이 맞지 않아 자원에 접근할 수 없다는 뜻이다

413 Payload Too Large

페이로드가 서버의 제한보다 훨씬 커서 받을 수 없음을 나타낸다

414 URI Too Long

서버가 해석할 수 있는 범위에 비해 URI가 지나치게 길다는 의미이다

쿼리 정보가 엄청나게 길 때 등에 발생한다

415 Unsupported Media Type

클라이언트가 요청한 미디어 타입이 서버에서 지원하지 않는 타입이라 서버가 요청을 거부하였다

416 Request Range Not Satisfiable

요청 범위를 서버가 커버할 수 없음을 의미한다

417 Expection Failed

요청 헤더의 Expect 값이 서버에서 생각하는 값과 다르다

418 I’m a teapot

서버가 찻주전자라서 커피를 내릴 수 없다…

1998년도 만우절 농담인 HTCPCP (HyperText Coffee Pot Control Protocol) 이스터에그이다 (와하하하하)

422 Unprocessable Entity

요청을 잘 받았고 문법도 올바르긴 한데 서버에서는 이 지시에 따를 수 없음을 의미한다

클라이언트는 재전송 전에 지시를 수정해야 한다

425 Too Early

재요청 공격의 부담을 서버가 감당하고 싶지 않다는 뜻이다

426 Upgrade Required

클라이언트의 프로토콜이 서버의 프로토콜과 맞지 않으므로, 클라이언트가 다른 프로토콜로 업그레이드하기 전까진 응답을 거부할 것이라는 뜻이다

428 Precondition Required

이 요청에 대한 응답을 받고 싶다면 사전에 조건 (Condition) 을 명시해야 한다는 의미이다

한 사용자가 PUT 요청을 보내 서버의 값이 수정되는 동안, 다른 사용자가 해당 자원을 수정하면 발생하는 충돌을 막기 위한 코드이다

429 Too Many Requests

일정 시간 동안 너무 많은 요청이 들어왔으므로, 이를 거부하겠다는 의미이다

대부분의 API에는 서버 부하를 막기 위한 요청 개수 제한이 걸려 있으며, 이를 초과하면 반환하는 코드이다

431 Request Header Fields Too Large

헤더의 크기가 너무 크기 때문에 서버 측에서 처리할 수 없음을 나타낸다

요청 헤더의 크기를 줄여서 재요청하자

보통 쿠키가 너무 많거나, Referer URL이 너무 길면 발생한다

451 Unavailable For Legal Reasons

법적으로 접근할 수 없는 페이지이다

국가 검열 등의 이유로 발생하는 응답이다

5XX

4XX와 같이 오류를 나타내긴 하지만, 서버상의 오류로 응답을 보낼 수 없다는 뜻이다

5XX 코드를 받았을 땐 클라이언트가 할 수 있는 일이 없다…

500 Internal Server Error ⭐️

요청을 처리하는 과정에서 서버가 예상치 못한 상황에 놓여 더이상 처리를 할 수 없음을 의미한다

‘예상치 못한 상황’ 이라는 게 가짓수는 천차만별인데 정확히 어떤 이유인지 명시하지 않으므로, 이 코드만 보고는 서버가 무슨 문제인지 알 수 없다

이 때문에 대개 서버 관리자들은 이 응답에 추가적으로 에러 사유를 덧붙이곤 한다

501 Not Implemented

해당 요청을 수행할 수 있는 기능이 서버에겐 없으므로, 처리할 수 없다

GETHEAD는 모든 서버가 반드시 지원해야 하는 필수 메서드이므로 이 오류가 발생하지 않는다

이 오류가 발생하면 클라이언트는 할 수 있는게 아무것도 없다

502 Bad Gateway ⭐️

게이트웨이로 연결된 서버로부터 유효하지 않은 응답을 받았다는 것을 의미한다

503 Service Temporarily Unavailable ⭐️

서버를 일시적으로 사용할 수 없다

대개 과부하 등 서버가 터져버리면 발생한다

504 Gateway Timeout ⭐️

게이트웨이로 연결된 서버로부터 제한시간 안에 어떠한 응답을 받지 못했음을 의미한다

505 HTTP Version Not Supported

명시한 HTTP 버전을 서버에서는 지원하지 않는다는 뜻이다

508 Loop Detected

요청을 처리 중에 무한루프를 발견하면 나오는 코드이다

510 Not Extended

요청을 처리하려면 추가 확장이 필요할 때 알려주는 코드이다

511 Network Authentication Required

사용자가 네트워크 액세스 권한을 취득해야 하는 경우 알려주는 코드

공용 와이파이 같은 걸 사용할 때 로그인을 하라고 나오는 것과 비슷하다


참고 자료

100 Continue - HTTP | MDN

그냥 MDN을 열심히 읽었다...

'이론적인 부분들 > ' 카테고리의 다른 글

DOM과 웹 렌더링  (0) 2023.05.19
JWT  (0) 2022.10.10
로그인, 인증, 인가  (0) 2022.10.08
쿠키와 세션  (0) 2022.10.08
HTTP 기본  (0) 2022.08.04
Comments