[HTTP] HTTP 응답 상태 코드
HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려준다.
응답은 5개 그룹으로 나뉜다. 정보 제공 응답, 성공 응답, 리다이렉트, 클라이언트 에러, 서버 에러
다섯가지 정보 응답에 대해 정리하고자 한다.
정보 응답
100 Continue : 지금까지의 상태가 괜찮으며 클라이언트가 계속 요청하거나 이미 요청 완료 시 무시해도 된다는 걸 알려준다.
101 Switching Protocol : 클라이언트가 보낸 Upgrade 요청 헤더에 대한 응답에 들어가며 서버에서 프로토콜을 변경할 것임을 알려준다.
102 Processing : 서버가 요청을 수신하였으며 처리하고있지만 아직 제대로 된 응답을 알려줄 수 없음을 알려준다.
103 Early Hints : 주로 link 헤더와 함께 사용되어 서버가 응답을 준비하는동안 사용자 에이전트가 사전 로딩을 시작할 수 있도록 한다.
성공 응답
200 OK : 요청 성공. HTTP 메소드에 따라 의미는 달라진다.
GET - 리소스 불러와서 메세지 바디에 전송
HEAD : 개체 헤더가 메세지 바디에 있다
TRACE : 메세지 바디는 서버에서 수신한 요청 메세지를 포함하고 있다.
PUT 또는 POST : 수행 결과에 대한 리소스가 메세지 바디에 전송되었다.
201 Created : 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었다. 일반적으로 POST 요청 또는 PUT 요청 이후 따라온다.
202 Accepted : 요청을 수신하였지만 그에 응한 행동 불가. 다른 프로세스에서 처리 또는 서버가 요청을 다루거나 배치 프로세스를 하고 있는 경우를 위해 만들어짐.
203 Non-Authoritative Information : 이 응답코드는 돌려받은 메타 정보 세트가 오리진 서버의 것과 일치하지 않지만 로컬이나 서드 파티 복사본에서 모아졌음을 의미한다.
204 No Content : 요청에 대해서 보내줄 수 있는 콘텐츠가 없지만, 헤더는 의미있을 수 있다. 사용자-에이전트는 리소스가 캐시된 헤더를 새로운 것으로 업데이트 할 수 있다.
205 Reset Content : 요청을 완수한 이후 사용자 에이전트에게 이 요청을 보낸 문서 뷰를 리셋하라고 알려준다.
206 Partial Content : 클라이언트에서 복수 스트림을 분할 다운로드 하고자 범위 헤더를 전송하여 사용된다
207 Multi-status : 멀티-상태 응답은 여러 리소스가 여러 상태 코드인 상황이 적절한 경우에 해당되는 정보를 전달한다.
208 Multi-Status : DAV에서 사용된다. propstat(property와 status의 합성어) 응답 속성으로 컬렉션으로 바인드된 복수 내부 멤버를 반복적으로 열거하는 것을 피하기 위해 사용된다.
226 IM Used : 서버가 GET 요청에 대한 리소스의 의무를 다했고, 응답이 하나 또는 그 이상 인스턴스 조작이 현재 인스턴스에 적용되었음을 알려준다.
리다이렉션 메세지
300 Multiple Choice : 요청에 대해 하나 이상의 응답이 가능하다. 사용자 에이전트 또는 사용자는 그중에 하나를 반드시 선택해야 한다. 응답 중 하나를 선택하는 방법에 대한 표준화 된 방법은 존재하지 않는다.
301 Moved Permanently : 요청한 리소스의 URI가 변경되었음을 의미한다. 새로운 URI가 응답에서 주어질 수 있다.
302 Found : 요청한 리소스의 URI가 일시적으로 변경되었음을 의미한다.
303 See Other : 클라이언트가 요청한 리소스를 다른 URI 에서 GET 요청을 통해 얻어야 할때 서버가 클라이언트로 직접 보내는 응답이다.
304 Not Modified : 캐시를 목적으로 사용한다. 클라이언트에게 응답이 수정되지 않았음을 알려주며 클라이언트는 계속해서 응답의 캐시 버전을 사용할 수 있다.
305 Use Proxy : 이전 버전의 HTTP 기술 사양에서 정의되었으며, 요청한 응답은 반드시 프록시를 통해 접속해야 하는 것을 알려준다. 프록시의 in-band 설정에 대한 보안상의 걱정으로 인해 사라져가고 있다.
306 unused : 더이상 사용되지 않으며, 추후 사용을 위해 예약되어 있다. HTTP 1.1 기술사양 이전 버전에서 사용되었다.
307 Temporary Redirect : 클라이언트가 요청한 리소스가 다른 UTI에 있으며, 이전 요청과 동일 메소드를 사용하여 요청해야 할 때 서버가 클라이언트에 이 응답을 직접 보낸다. 302와 동일한 의미이며 사용자 에이전트가 HTTP 메소드를 변경하지 말아야 하는 점만 다르다. 만약 첫 요청이 POST라면 두번째 요청도 POST를 사용해야한다.
308 Permanct Redirect : 리소스가 이제 HTTP 응답 헤더의 location에 명시된 영구히 다른 URI에 위치함을 의미한다. 301 HTTP 응답 코드와 동일 의미이며 사용자 에이전트가 반드시 HTTP 메소드를 변경하지 말아야 하는 점만 다르다. 첫 요청에 POST라면 두번째 요청도 반드시 POST를 사용해야 한다.
클라이언트 에러 응답
400 Bad Request : 잘못된 문법으로 서버가 요청을 이해할 수 없음을 의미한다.
401 Unauthorized : HTTP 표준에서는 미승인을 명확히 하고 있지만, 비인증(unauthenticated)을 의미한다. 클라이언트는 요청한 응답을 받기 위해 인증해야한다.
402 Payment Required : 나중에 사용될걸 대비해 예약되었다. 디지털 결제 시슽템에 사용하기 위해 만들어졌지만 지금 사용되진 않는다.
403 Forbidden : 클라이언트가 콘텐츠에 접근할 권리를 가지고 있지 않다. 401과 다른 점은 클라이언트가 인증된것.
404 Not found : 서버가 요청받은 리소스를 찾을 수가 없다. 브라우저에서는 알려지지 않은 URL을 의미한다. API에서 종점은 적절하지만 리소스 자체는 존재하지 않음을 의미할 수 있다. 서버들이 인증받지 않은 클라이언트로부터 리소스를 숨기기 위해 403 대신 전송할 수 도 있다. 유명하다. 서버 터지면 볼 수 있어서 익숙하다.
405 Method Not Allowed : 서버에서 알고 있지만 제거되었고 사용할 수 없다. 필수 메소드인 GET과 HEAD는 제거될 수 없으며 에러 코드를 리턴할 수 없다.
406 Not Acceptable : 사용자 에이전트에서 정해준 규겨에 따른 콘텐츠 찾지 않았을 때 웹서버가 보낸다.
407 Proxy Authentication Required : 401과 비슷하지만 프록시에 의해 완료된 인증이 필요하다.
408 Request Timeout : 요청한지 시간이 오래된 연결에 일부 서버가 전송하며 어클라이언트로부터 요청이 없었다면 보내기도 한다. 서버가 사용되지 않는 연결을 끊고 싶어한다는 것을 의미한다. 웹서핑 속도를 올리기 위해 HTTP 사전 연결 메커니즘을 사용하는 브라우저들에서 빈번하게 보인다. 일부 서버는 이 메세지를 안보내고 연결을 끊기도 한다.
409 Confilict : 요청이 현재 서버의 상태와 충돌될 때 보낸다.
411 Gone : 콘텐츠가 서버에서 영구적으로 삭제되었으며 전달해줄 주소 미존재 시 보낸다.
411 Length Required : content-length 헤더 필드가 정의되지 않은 요청이 들어와 서버가 거절한다.
412 Precondition Failed : 클라이언트 헤더의 전제조건이 서버의 전제조건에 적절하지 않다.
413 Payload Too Large : 요청 엔티티는 서버에서 정의한 한계보다 크다.
414 URI Too Long : 클라이언트가 요청한 URI는 서버에서 처리하지 않기로 한 길이보다 길다.
415 Unsupported Media Type : 요청한 미디어 포맷은 서버에서 지원하지 않는다.
416 Requested Range Not Satisfiable : range 헤더 필드에 요청한 지정 범위를 만족시킬 수 없다.
417 Excetation Failed : expect 요청 헤더 유효하지 않다.
418 I;m a teapot : 서버는 커피를 찻주전자에 끓이는 것을 거절한다. (이게 뭐지? 별게다있다)
421 Misdiriirected Request : 서버로 유도된 요청은 응답을 생성할 수 없다.
422 Unprocessable Entity : 요청은 잘 만들어졌지만 문법 오류로 불가
423 : Locked : 리소스 접근 잠김.
424 failed dependency : 이전 요청 실패로 지금 요청 실패
426 Upgrade Required : 프로토콜 문제로 요청 처리 거절
428 Precondition Required : 오리진 서버 요청 조건적
429 Too many requests : 사용자가 지정된 시간에 너무 많은 요청을 보냄
431 Request Header Fileds too large : 요청한 헤더 필드가 너무 커 요청을 처리하지 않음. 요청은 크기를 줄인 뒤 다시 전송해야 함.
451 Unavailbable for legal reasons : 사용자가 요청한 것은 정부에 의해 검열된 웹 페이지와 같은 불법적인 리소스이다.
서버 에러 응답
500 Internal Server Error : 서버가 처리 방법을 모르는 상황 발생
501 Not Implemented : 요청 방법이 서버에서 지원되지 않아 처리 불가.
502 Bad Gateway : 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안 잘못된 응답을 수신함
503 service unavailable : 서버가 요청을 처리할 준비가 되지 않음. 일반적인 원인은 유지보수를 위해 작동이 중단되거나 과부하가 걸렸을 때이다. 이 응답과 함께 문제를 설명하는 사용자 친화 페이지가 전송되어야 한다.
504 Gateway Timeout : 서버가 게이트웨이 역할을 하고 있어 적시에 응답을 받을 수 없다.
505 HTTP Version Not Supported : 요청에 사용된HTTP 버전 서버 미지원
506 Variant also negotiates : 서버 내부 구성 오류. 요청을 위한 투명 컨텐츠 협상이 순환 참조로 이어짐.
507 Insufficient storage : 서버에 내부 ㄱ ㅜ성 오류 존재
508 Loop Detected : 서버가 요청을 처리하는 동안 무한 루프 감지
510 Not Extended : 서버가 요청을 이행하려면 요청에 대한 추가 확장이 필요
511 Network Authentication Required : 클라이언트가 네트워크 액세스를 얻기 위해 인증을 받을 필요가 있음
오늘은 HTTP 상태 코드에 대해 알아보았다.