Etc.

HTTP Response

ssung3847 2022. 2. 9. 15:42
Ctrl + F (windows)
Command + F (mac)

위 명령으로 에러 코드를 찾을 수 있다.

응답은 총 5개의 그룹으로 나누어진다.

1. 정보를 제공하는 응답 (Informational responses)
2. 성공적인 응답 (Successful responses)
3. 리다이렉트 (Redirection messages)
4. 클라이언트 에러 (Client error responses)
5. 서버 에러 (Server error responses)

 

정보를 제공하는 응답 (Informational responses) - 1xx

  • 100 Continue
    이상 없음을 뜻한다. 클라이언트가 서버로 보낸 요청에 문제가 없으니 다음 요청을 이어서 보내도 된다는 것을 의미함. 클라이언트의 작업이 완료되었다면 해당 응답은 무시해도 됨.

  • 101 Switching Protocol
    클라이언트가 보낸 Upgrade 헤더를 통해 요청한 것에 따라 서버가 프로토콜을 바꾼다는 것을 알려줌.


    Upgrade 헤더를 사용하면 이미 설정된 클라이언트/서버 연결을 다른 프로토콜로 업그레이드 할 수 있다.

    ex) HTTP 1.1 에서 HTTP 2.0 으로 업그레이드
    ex) HTTP/HTTPS 에서 WebSocket으로 업그레이드
  • 102 Processing
    서버가 요청을 수신하고 처리 중이지만 아직 제대로 된 응답을 할 수 없음을 뜻한다.

  • 103 Early Hints
    주로 Link헤더와 함께 사용되어 서버가 응답을 준비하는 동안 사용자 에이전트(웹에선 브라우저를 의미함)가 사전 로딩을 시작할 수 있도록 한다.

    Link 헤더

    HTML <link>태그와 같은 용도로써, Content-Type이 text/html이 아닐 때도 <link>태그에 담기는 내용들을 메타데이터로 전송할 수 있게 해준다.

성공적인 응답 (Successful responses) - 2xx

  • 200 OK
    요청이 성공적으로 되었다는 의미. 이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰임.

    성공의 의미는 HTTP 메소드에 따라 달라진다.
    GET: 리소스를 불러와서 메시지 바디에 전송되었습니다.
    HEAD: 개체 헤더가 메시지 바디에 있습니다.
    PUT/POST: 수행 결과에 대한 리소스가 메시지 바디에 전송되었습니다.
    TRACE: 메시지 바디는 서버에서 수신한 요청 메시지를 포함하고 있습니다.
  • 201 Created
    요청이 성공적으로 처리되었으며, 자원이 생성되었음을 나타낸다.

  • 202 Accepted
    요청이 성공적으로 접수되었으나, 아직 해당 요청에 대해 처리 중이거나 처리 시작 전임을 의미함. 요청이 처리 중 실패할 수도 있기 때문에 요청은 실행될 수도 실행되지 않을 수도 있다.

  • 203 Non-Authoritative Information
    서버가 요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공하고 있다는 의미.

  • 204 No Content
    서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않음을 뜻함.

  • 205 Reset Content
    서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않는다는 의미. 204 No Content와 달리 이 응답은 클라이언트가 문서를 새로고침 할 것을 요구한다.

  • 206 Partial Content
    컨텐츠의 일부 부분만 제공한다. 보통 클라이언트에서 시작 범위나 다운로드할 범위를 지정한 경우 자동으로 해당 부분만 제공할 때 사용하는 코드이다.

    Range 헤더

    서버에게 문서의 일부분만 돌려주어야 한다는 것을 알려준다.

    이 때, 서버가 돌려보내 주면 206 Partial Content를 응답으로 사용. 범위가 유효하지 않으면 416 Range Not Satisfiable 에러를 보냄. 또한, 서버는 Range 헤더를 무시하고 200 OK 상태를 돌려줄 수도 있음.
  • 207 Multi-Status (WebDAV 전용)
    여러 리소스가 여러 상태 코드인 상황이 적절한 경우에 해당되는 정보를 전달한다.

  • 208 Multi-Status (WebDAV 전용)
    DAV 바인딩 멤버는 이미 응답의 앞 부분에 열거되어 있으며 다시 포함되지 않는다는 의미로 사용됨.

  • 226 IM Used (HTTP Delta encoding 전용)
    서버가 GET 요청에 대한 리소스의 의무를 다 했고, 응답이 하나 또는 그 이상의 인스턴스 조작이 현재 인스턴스에 적용이 되었음을 알려줌.

리다이렉트 (Redirection responses) - 3xx

  • 300 Multiple Choice
    서버에서 여러 개의 응답이 있음을 알릴 때 사용할 의도로 만들어 졌으나, 응답을 선택하는 방법이 표준화 되어 있지 않아 사용하지 않는다.

  • 301 Moved Permanently
    요청한 리소스가 Location 헤더에 주어진 URL로 완전히(영구히) 옮겨졌다는 것을 의미함. 브라우저는 이 페이지로 리다이렉트 하고, 검색 엔진은 해당 리소스로 연결되는 링크를 갱신한다.

    Location 헤더

    리소스가 리다이렉트된 때에 이동된 주소 또는 새로 생성된 리소스 주소를 명시한다. 300번대 응답이나 201 Created 응답일 때 어느 페이지로 이동할지를 알려준다.

    새로 생성된 리소스의 경우 201 Created가 반환된다.
    300번대 응답의 경우 새로운 주소로 redirect한다.
  • 302 Found
    클라이언트가 요청한 리소스가 Location 헤더에 주어진 URL에 일시적으로 이동 되었음을 의미함.

  • 303 See Other
    서버가 사용자의 GET 요청을 처리하여 다른 URL에서 요청된 정보를 가져올 수 있도록 한다.

  • 304 Not Modified
    클라이언트에게 응답이 수정되지 않았음을 의미한다. 그러므로 클라이언트는 요청된 리소스를 재전송할 필요가 없음을 나타낸다.

  • 305 Use Proxy
    이전 버전의 HTTP 기술 사양에서 정의됨. 요청한 응답은 반드시 프록시를 통해서 접속해야 하는 것을 알려준다. 보안상의 이유로 현재 사용 중지된 비권장 코드이다.

  • 306 unused
    더이상 사용되지 않으며, 추후 사용을 위해 예약되어 있음.

  • 307 Temporary Redirect
    302 Found와 동일한 의미이지만 HTTP 메소드의 변경을 허용하지 않는다.

  • 308 Permanent Redirect
    301 Moved Permanently와 동일한 의미이지만 HTTP 메소드의 변경을 허용하지 않는다.

클라이언트 에러 (Client error responses) - 4xx

  • 400 Bad Request
    잘못된 문법으로 인해 서버가 요청을 이해할 수 없음을 뜻한다.

  • 401 Unauthorized
    유효한 인증 자격 증명이 없기 때문에 요청이 적용되지 않았음을 나타낸다. 이름은 미승인(Unauthorized) 이지만 실제 의미는 인증 안됨(Unauthenticated)에 더 가깝다.

  • 402 Payment Required
    결제가 필요하다는 의미. 나중에 사용될 것(디지털 결제 시스템에 사용하기 위해)을 대비해 예약 됨. 지금 사용되고 있지는 않다. 이런 상황에서 보통 403 Forbidden을 사용한다.

  • 403 Forbidden
    서버가 요청을 거부하고 있다는 의미. 클라이언트가 콘텐츠에 접근할 권리를 가지고 있지 않을 때 발생한다. 401 Unauthorized와 다른점은 서버가 클라이언트가 누구인지 알고 있다는 점이다.

  • 404 Not Found
    서버가 요청받은 리소스를 찾을 수 없다는 의미이다. 리소스가 일시적 또는 영구적으로 사라진 것을 의미하지는 않는다. 리소스가 영구히 삭제 되었다면 410 Gone로 응답한다.

  • 405 Method Not Allowed
    요청에 지정된 방법을 사용할 수 없다는 의미. POST 방식으로 요청을 받는 서버에 GET 요청을 보내는 경우나 읽기 전용 리소스에 PUT 요청을 보내는 등 서버에서 허용되지 않은 메소드로 요청시 사용한다.

  • 406 Not Acceptable
    서버가 서버 주도 콘텐츠 협상을 수행한 이후, 사용자 에이전트에서 정해준 규격에 따른 어떠한 콘텐츠도 찾지 않았을 때, 웹서버가 보냄.

    쉽게 말해, 요청은 정상이나 서버에서 받아들일 수 없는 요청일 시 사용하는 코드이다. 보통 방화벽에 걸리는 경우.

    서버 주도 콘텐츠 협상

    클라이언트가 리소스를 내려받길 원하는 경우 URL을 사용하여 요청한다. 서버는 리소스를 선택하기 위해 이런 URL을 사용하며 클라이언트에게 해당 리소스의 특정 프레젠테이션을 반환한다. 프레젠테이션은 리소스가 제공하는 변형을 뜻한다.

    이 때, 클라이언트가 보내는 특정 HTTP 헤더를 이용해 프레젠테이션을 선택하는 것이 서버 주도 콘텐츠 협상이다.

  • 407 Proxy Authentication Required
    401 Unauthorized와 비슷하지만 프록시에 의해 완료된 인증이 필요함.

  • 408 Request Timeout
    서버의 요청 대기가 시간을 초과하면 서버가 전송. 서버가 클라이언트의 요청이 없어도 유휴 상태의 연결에 전송한다. 이는 서버가 사용되지 않는 연결을 끊고 싶어 한다는 것을 의미함.

  • 409 Conflict
    요청이 현재 서버의 상태와 충돌이 있다는 것을 의미.

  • 410 Gone
    요청한 콘텐츠가 서버에서 영구적으로 삭제되었으면 전달해 줄 수 있는 주소마저 존재하지 않음을 의미함. 이전에 있었지만 더 이상 존재하지 않는 리소스에 대해 404 Not Found 대신 사용하기도 하며, 리소스가 영구적으로 이동된 경우에는 301 Moved Permanently를 사용하여 리소스의 새 위치를 지정해야 함.

  • 411 Length Required
    서버에서 필요로 하는 Content-Length 헤더 필드가 정의되지 않은 요청이 들어왔기 때문에 서버가 요청을 거절했다는 의미.

  • 412 Precondition Failed
    클라이언트의 헤더에 있는 전제조건이 서버의 전제조건에 적합하지 않는다는 의미.

  • 413 Payload Too Large
    요청 엔티티가 서버에 의해 정의된 제한보다 크다는 것을 의미함. 서버가 연결을 닫거나 헤더 필드(Retry-After)를 반환할 수 있다.

    Retry-After 헤더

    다음에 올 요청이 이루어지기 전에 사용자 에이전트가 대기해야 하는 시간을 가리킨다.
  • 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
    서버에서 요청 URI와 연결된 스킴과 권한을 구성하여 응답을 생성할 수 없을 때 보내짐.

  • 422 Unprocessable Entity (WebDAV 전용)
    서버가 요청을 이해하고 요청 문법도 올바르지만 요청된 지시를 따를 수 없음을 의미함.

  • 423 Locked (WebDAV 전용)
    접근하려는 리소스가 잠겨 있음을 의미함.

  • 424 Failed Dependency (WebDAV 전용)
    이전 요청이 실패한 상태에서 지금의 요청도 실패한 경우. 간단히 말해 연속 실패.

  • 426 Upgrade Required
    서버는 현재 프로토콜을 사용해 요청을 처리하는 것을 거절. 하지만 클라이언트는 Upgrade 헤더 필드에 주어진 프로토콜로 업그레이드 한다면 처리를 해줄 수도 있다.

  • 428 Precondition Required
    오리진 서버는 요청이 조건적이어야 한다는 의미. 클라이언트가 리소스를 GET해서, 수정하고 PUT으로 서버에 돌려놓는 동안 서드파티가 서버의 상태를 수정하여 발생하는 충돌인 '업데이트 상실'을 예방하기 위한 목적.

  • 429 Too Many Requests
    일정 시간동안 너무 많은 요청을 보낸 경우 이를 거부하기 위해 사용한다.

  • 431 Request Header Fields Too Large
    요청한 헤더 필드가 너무 크기 때문에 서버는 요청을 처리하지 않는다. 요청 헤더의 크기를 줄인 후 다시 전송해야 한다. 캐시 및 쿠키를 정리하면 대부분 정상적으로 서버에서 응답한다.

  • 451 Unavailable For Legal Reasons
    국가 검열 등, 법적인 이유로 차단 되었을 경우 사용한다. 서버는 Link 헤더로 차단된 근거가 되는 주소를 보낼 수 있다.

서버 에러 (Server error responses) - 5xx

  • 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 Insuffcient Storage (WebDAV 전용)
    선택한 가변 리소스는 투명한 콘텐츠 협상에 참여하도록 구성되므로 협상 프로세스의 적절한 종료 지점이 아니다.

  • 508 Loop Detected (WebDAV 전용)
    서버가 요청을 처리하는 동안 무한 루프를 감지했을 경우.

  • 510 Not Extended
    서버가 요청을 이행하려면 요청에 대한 추가 확장이 필요하다.

  • 511 Network Authentication Required
    클라이언트가 네트워크 액세스를 얻기 위해 인증을 받아야 할 필요가 있음을 의미함.